응답방식 3가지 1. 정적컨텐츠 /resources/static에 hello-staic.html을 만든뒤 서버를 돌리고 http://localhost:8080/hello-static.html로 접속하면 html에서 구현한 화면이 나옵니다. 컨트롤러에 딱히 아무 코드
먼저 domain이라는 패키지 안에 Member 클래스를 정의해줍니다. 이제 repository라는 패키지를 만들어서 MemberRepository라는 interface를 만들어줍니다. 이제 각각의 함수에 대해서 정의해줄 MemoryMemberRepository라는 j
회원관리프로그램 - 리포지토리 테스트 케이스 이제 구현한 리포지토리에 함수들이 잘 동작하는지 살펴보기위해 테스트를 진행하겠습니다. test모듈 안에 repository라는 패키지를 만들고 그 안에 MemoryMemberRepositoryTest라는 java clas
회원 리포지토리와 다르게 회원 서비스는 조금더 비즈니스적인 기능(회원가입, 특정회원 조회, 전체회원조회)들을 작성합니다.회원가입시 같은 이름의 회원은 가입할 수 없으며 이를 따로 validateDuplicateMember로 정의해 사용합니다.아래 코드에서 final이라
회원관리프로그램 - 서비스 테스트 코드 이제 service에 있는 함수들도 잘 돌아가는지 테스트를 해보도록하겠습니다. test모듈에 service라는 패키지안에 MemberServiceTest라는 java class를 만들어줍니다. 특정회원조회와 전체회원조회는 r
지금까지 작성한 service를 controller와 이어주도록 하겠습니다. 먼저 MemberController를 생성해줍니다. 그리고 @Controller라는 어노테이션을 붙여주면 spring이 뜨면서 MemberController를 인식하고 컨테이너 안에 스프링빈으
기존에 컴포넌트 스캔을 한곳에 모아서 스프링빈을 등록하고 관리하는 방식으로 바꿔보겠습니다. 먼저 MemberController를 제외한 나머지 repository와 service의 어노테이션을 모두 지워줍니다그리고 Controller 패키지와 같은 위계에 SpringC
이제 controller에 모든 내용을 채워보도록 하겠습니다🤗모두 MVC방식입니다먼저 home페이지 부터 HomeController를 따로 만들어서 아래와 같이 작성해줍니다. home.html 템플릿을 반환합니다다시 MemberController로 돌아와 전체회원조회
지금까지는 데이터를 메모리(Map)로 만들어서 사용했기 때문에 순수한 java코드로만 테스트코드를 짜서 진행했지만 DB에 연결을 해서 데이터를 관리한다면 테스트때도 DB에서 데이터를 받아오기 위해 연결을 해야하고 따라서 스프링을 돌리면서 테스트를 진행해야합니다✨이렇게
스프링에 DB를 연결하는 것을 JdbcTemplate로 구현해보도록하겠습니다!리포지토리를 새로만들어줘야겠죠? JdbcTemplateMemberRepository라는 java class를 생성해줍니다. 그리고 JdbcTemplate 객체를 생성한뒤에 생성자를 이용해서 d
JPA 드디어 JPA입니다~ JdbcTemplate도 Jdbc에 비하면 코드작성이 편리해졌지만... 여전히 SQL문 작성, mapper 등에서 불편함을 가지고 있습니다. JPA를 이용해보면서 얼마나 편한지 직접 느껴보도록하겠습니다..😆 resources/app
예를들어 몇몇 메서드에 실행시간을 체크해보고싶은 상황이라고 한다면 해당 메서드들의 시작과 끝에 시간을 측정하고 출력하는 코드를 붙여야할 것입니다. 다행히 그게 몇개 밖에 되지않는다면 괜찮겠지만 만약 몇십개, 몇백개라면 어떨까요? 이때 필요한 기술이 바로 AOP입니다.
예를들어 몇몇 메서드에 실행시간을 체크해보고싶은 상황이라고 한다면 해당 메서드들의 시작과 끝에 시간을 측정하고 출력하는 코드를 붙여야할 것입니다. 다행히 그게 몇개 밖에 되지않는다면 괜찮겠지만 만약 몇십개, 몇백개라면 어떨까요? 이때 필요한 기술이 바로 AOP입니다.
이전까지 구축한 회원, 주문, 할인 기능을 하나씩 살펴보며 객체지향적으로 설계되었는지 그렇지 않았다면 객체지향의 원리를 적용해서 수정해보도록 하겠습니다기존코드에서 할인정책을 모든 vip회원을 일정금액 할인해주는 FixDiscountPolicy에서 구매금액의 일정 비율만
지금까지는 순수한 java코드로만 의존성을 주입했지만 이제 스프링을 적용해보겠습니다.설정파일을 뜻하는 @Configuration 어노테이션을 붙여주고 각각의 메서드에 @Bean을 붙여줘서 스프링빈으로 등록해줍니다. 이전에는 MemberService를 AppConfig에
이번에는 스프링 컨테이너의 계층에 대해 더 자세히 살펴보려고합니다. 코드에서 가져다 쓰는 ApplicationContext의 상위 계층인 BeanFactory는 스프링 컨테이너의 최상위 인터페이스 입니다. 스프링 빈을 관리하고 조회하는 것들을 제공합니다. App
웹어플리케이션의 특성과 싱글톤의 필요성웹 어플리케이션은 여러 유저가 끊임없이 많은 요청을 보냅니다. 따라서 스프링을 적용하기전 AppConfig의 구조대로라면 아래와 같이 요청마다 객체를 생성하게 됩니다. 이렇게 하면 메모리 낭비가 심하게 됩니다. 따라서 하나의 객체를
싱글톤은 하나의 객체를 생성해서 공유를 하기 때문에 상태를 유지(stateful)하게 설계하면 🔥절대🔥 안됩니다!!그렇다면 여러 유저들이 동시에 요청을 할 때 문제가 생길 수 있기 때문에 특정 유저에 의존적이게 설게를 하면 안됩니다. 예를 들어 전역변수를 만들어서
스프링은 정말 싱글 톤 패턴을 보장해줄까요?AppConfig를 보면 memberService와 odrderService가 호출되면서 각각 memberRepository가 호출되고 이로인해 MemoryMemberRepository가 각각 두개 생성되는 것으로 보입니다.
지금까지는 스프링 빈을 설정정보AppConfig)를 통해 등록했습니다. 이렇게 할 경우 스프링 빈이 많아질 수록 설정 정보가 커지고 반복도 많아집니다. 따라서 설정 정보 없이 스프링 빈을 등록하는 방식이 있는데 그것이 바로 컴포넌트 스캔입니다. 물론 의존관계도 설정정보
의존관계주입의 종류 의존관계주입의 종류는 크게 4가지가 있습니다. 지금까지 예제에서 가장많이 사용해온 생성자 주입은 생성자를 통해서 의존관계를 주입하는 것입니다. 생성자 호출시점에 주입되기 때문에 한번만 주입되는 것을 보장하고 불변, 필수 의존관계에 사용하면 좋습니다.
Lombok(롬복)롬복은 의존성주입 코드를 대신 작성해주는 편리한 라이브러리입니다. 롬복을 사용하면 아래와 같은 기존 코드가@RequiredArgsConstructor 이거 하나만 붙여주면 이렇게나 간단해집니다. 롬복이 따로 생성자 주입 코드를 넣어줍니다. 생성자주입
같은 타입 스프링빈 모두 출력 만약 같은 타입의 빈이 모두 필요한 경우 어떻게 해야할까? 사용자가 결제시에 rateDiscount와 fixDiscount를 선택할 수 있다고 해보자. 그러면 스프링빈에 같은 DiscountPolicy타입인 rate, fix 빈을 모두
빈 생명주기와 콜백 스프링 빈은 객체가 생성된 뒤에 의존성이 주입됩니다.
빈 스코프는 빈이 존재할 수 있는 범위를 뜻합니다 이때 범위는 시간이라고 보시면 됩니다! 아래와 같이 총 3가지 종류가 있습니다싱글톤 : 이제 까지 주로 다뤘던 빈들이 여기에 속합니다. 스프링 컨테이너의 시작과 끝을 함께하며 가장 범위가 넓은 스프링 빈입니다프로토타입:
빈스코프 : 웹 스코프 웹스코프의 특징은 웹환경에서만 동작한다는 것입니다. 또 스프링이 종료시점까지 관리하기때문에 종료메서드가 호출됩니다. 웹 스코프는 아래와 같이 여러 종류가 있지만 가장 익숙한 request에 대한 동작을 살펴보겠습니다 request: HTTP
하나의 작은 프로젝트(?)를 만들다 보면 슬슬 고민이 되는 부분 바로 유효성검사이다! 크게 Controller, Service, Repository, Entity(model)로 나눠서 작업하는 경우가 많은데 그렇다면 요청에서 넘어온 값들에 대한 유효성검사는 어디서 해
스프링 부트를 쓰다보면 잘 모르고 넘어가는 Spring MVC Flow! 이번기회에 한번 정리해보려고 합니다~JSP : HTML문서에서 내부적으로 Java문법을 사용할 수 있게 해주는 Java Server Page언어Servlet : client 의 요청에 대한 결과를
스프링 공부를 시작하고 주로 강의를 통해서 공부를 했기 때문에 application.yaml파일은 주로 따라서 적고 '이런 설정이구나' 정도로 이해하고 넘어가는 경우가 많았습니다. 그러던 중 최근 대체 어디서 참고해서 저렇게 수수수숙 쓰는 거지? 궁금해졌습니다. 나중에
최근 프로젝트를 하면서 당연하게 사용하던 DTO 매핑이 어떻게 일어나는지 궁금해졌고, DTO에 붙여주는 여러가지 롬북 어노테이션들.. 이중에 정말 필요한 것만 내가 쓰고있는가?라는 의문이 생겨서 싹 정리를 해보고 싶어졌습니다. DTO에 대부분의 어노테이션은 Objec