๑ `⌃´ ๑
Spring · 11
Spring
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
Spring
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
→
💙
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
Spring
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
Spring
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
→
💙
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
Spring
AOP(Aspect Oriented Programming)
2022.09.05
Spring
AOP(Aspect Oriented Programming)
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
AOP(Aspect Oriented Programming)
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
→
💙
AOP(Aspect Oriented Programming)
2022.09.05
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
AOP(Aspect Oriented Programming)
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
AOP(Aspect Oriented Programming)
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
AOP(Aspect Oriented Programming)
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
AOP(Aspect Oriented Programming)
2022.09.05
기술 시험에서 AOP가 기억이 안나서 서술을 못하는 바람에 이참에 간단하게라도 정리하고자 작성..ㅠㅠ AOP란 관점 지향 프로그래밍의 약자로, 하나의 흐름에 특정한 시점에서 수행되는 프로그램을 만드는 것이다. OOP는 로직 자체를 모듈화한다면 AOP는 부가기능을 모듈화 한다고 할 수 있는데, AOP의 대표적인 예로는 트랜잭션(데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들)이 있다. 직접 짠 코드로 예를 들어보자면.. String page = "emp_login"; if(session.getAttribute("loginId") != null) { page = "redirect:/courList.do"; }else { mod..
Spring
Model1, Model2, MVC 패턴
2022.07.18
Spring
Model1, Model2, MVC 패턴
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
Model1, Model2, MVC 패턴
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
→
💙
Model1, Model2, MVC 패턴
2022.07.18
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
Model1, Model2, MVC 패턴
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
Model1, Model2, MVC 패턴
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
Model1, Model2, MVC 패턴
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
Model1, Model2, MVC 패턴
2022.07.18
Spring을 제대로 사용하기 위해서는 Model1, Model2, MVC 패턴이 무엇인지 알아야한다고 한다. 기술 면접에도 단골로 등장하는 주제라고 하며, 마침 이 용어들에 대해 애매하게 알고 있어서 정리하고자 한다. 우선 컨트롤러와 모델, 뷰에 대해서 알 필요가 있다. View 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller 요청한 내용을 확인하여 해당 업무를 수행할 Model에게 전달하는 역할 Model Controller 에서 받은 요청을 처리 후 반환하는 역할 Model1 JSP와 Java Bean으로 프로젝트를 구성하여 개발하는 형태이다. 1990년~2000년 초까지 웹개발에 사용된 아키텍쳐였으며, 개발 속도가 빠르긴하나 로직을 담당하는 컨트롤러와 뷰가 합쳐져있어 유지보..
Spring
동적 쿼리
2022.07.18
Spring
동적 쿼리
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
동적 쿼리
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
→
💙
동적 쿼리
2022.07.18
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
동적 쿼리
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
동적 쿼리
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
동적 쿼리
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
동적 쿼리
2022.07.18
동적 쿼리는 상황에 따라 다른 쿼리문을 실행하게 하는 쿼리로, 자바의 조건문을 생각하면 이해하기 쉽다. Java와 MyBatis는 표기법이 약간씩 다르기 때문에 주의가 필요하다. test 속성을 만족할 경우에 해당 쿼리문을 실행한다. INSERT INTO member(id,pw,name,email) VALUES(#{id},#{pw},#{name},#{email}) VALUES(#{id},#{pw},#{name},'이메일 없음') test 속성에는 true/false를 반환할 boolean 타입의 조건이 필요하다. / / Java의 if else 구문과 비슷하다. if 태그만을 단독으로 사용했을 때에는 하나의 조건에 대한 판단만 가능하며 else 의 경우를 판단할 수 없다. 이 때 choose 태그를 사용..
Spring
Ajax
2022.05.27
Spring
Ajax
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
Ajax
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
→
💙
Ajax
2022.05.27
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
Ajax
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
Ajax
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
Ajax
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
Ajax
2022.05.27
ajax는 Asynchronous Javascript And Xml 의 준말로, 비동기로 통신하는 Javascript(JSON)와 xml 이라는 뜻이다. 여기서 동기화와 비동기화는 아래와 같은 차이가 있다. ✔ 동기화 : 요청한 일이 끝날때까지 다른 일을 하지 못한다. 값을 입력했을때 값이 사라진다. ✔ 비동기화 : 요청해놓고 다른 일을 자유롭게 할 수 있다. 값을 입력하면 값이 사라지지 않는다. ID 중복체크와 같은 기능 구현시 사용한다. 위와 같은 간단한 로그인양식을 만들었을때, 이를 비동기방식으로 처리해볼 것이다. cotroller에 로그인을 처리할 코드를 입력해야 하는데, 동기화와 달리 비동기화는 controller도 비동기에 맞게 변경해야한다. 1) response 객체를 이용해 응답해야하고, ..
Spring
root-context 에 파일업로드 설정하기
2022.05.26
Spring
root-context 에 파일업로드 설정하기
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
root-context 에 파일업로드 설정하기
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
→
💙
root-context 에 파일업로드 설정하기
2022.05.26
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
root-context 에 파일업로드 설정하기
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
root-context 에 파일업로드 설정하기
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
root-context 에 파일업로드 설정하기
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
root-context 에 파일업로드 설정하기
2022.05.26
defaultEncoding : 인코딩은 뭘로 할 것인지? maxUploadSize : 파일 업로드시 최대 사이즈는 얼마나 할 것인지? maxInaMemorySize : 메모리 버퍼 용량
Spring
기본 DB 설정하기
2022.05.24
Spring
기본 DB 설정하기
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
기본 DB 설정하기
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
→
💙
기본 DB 설정하기
2022.05.24
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
기본 DB 설정하기
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
기본 DB 설정하기
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
기본 DB 설정하기
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
기본 DB 설정하기
2022.05.24
src/main/webapp/WEB-INF/spring/appServlet 안에 servlet-context.xml 파일에서 맨 아래 위에다 아래 내용을 넣어주면 된다. ip 주소와 패키지명에 주의해서 작성해야한다. 아래 내용들을 넣어야 db 에 내용을 입력하거나 입력된 내용을 빼올 수 있다.
Spring
로그인 페이지 만들기
2022.05.23
Spring
로그인 페이지 만들기
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
로그인 페이지 만들기
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
→
💙
로그인 페이지 만들기
2022.05.23
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
로그인 페이지 만들기
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
로그인 페이지 만들기
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
로그인 페이지 만들기
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
로그인 페이지 만들기
2022.05.23
1. Controller 만들기 @Autowired MemberService service; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { logger.info("로그인 페이지"); return "login"; } @RequestMapping(value = "/joinForm") public String joinForm(Model model) { logger.info("회원가입 페이지1"); return "joinForm"; } @RequestMapping(value = "..
🎵 Playlist
loading...
00:00 / 00:00