반응형 스프링16 Spring Bean으로 등록된 EntityManager 자바 동적 프록시 기술을 알고 읽으시는 게 좋습니다!!! JPA를 처음에 배우면 엔티티 매니저는 여러 스레드가 동시에 접근하므로 스레드 간 공유하면 절대 안된다고 학습한다. 그러나 스프링 부트 애플리케이션을 돌려보면 처음에 엔티티 매니저가 스프링 빈으로 등록되는 것을 확인할 수 있다. '스프링 부트 자동 구성을 통해 엔티티 매니저가 스프링 빈으로 등록, 즉 싱글톤으로 사용이 되는 거 같아' 위와 같은 의문점이 들었고, 이에 관련해서 구글에 찾아보기 시작했다. 결론을 말하면 스프링 빈으로 등록되는 것은 엔티티 매니저 가짜 객체고 실제 애플리케이션에서 로직이 수행될 때 진짜 엔티티 매니저가 사용된다는 것이다. 이러면 쓰레드 세이프하다고 말할 수 있다. 단순히 그렇구나 하고 넘어간 것을 오늘은 눈으로 확인해보.. 개발/JPA 2023. 5. 12. 토비의 스프링 Vol.1 6장 AOP 포스팅 시작하겠습니다. 6.1 트랜잭션 코드의 분리 지난 챕터에서 우리는 서비스 추상화를 이용해 UserService에서 특정 트랜잭션 기술에 종속적이지 않은 깔끔한 코드를 만들었다. 그러나 여전히 비즈니스 로직을 수행해야만 하는 UserService에 트랜잭션 기술 코드가 들어있다. 이를 해결하기 위해 데코레이터 패턴을 적용했다. UserService 인터페이스를 만들고 이를 구현한 비즈니스 로직을 수행하는 UserServiceImpl 클래스와 트랜잭션을 수행할 UserServiceTx 구현클래스를 작성했다. UserServiceTx가 UserServiceImpl을 인스턴스 변수로 받아 트랜잭션 경계 설정 코드를 진행하고 비즈니스 로직 관련 부분은 UserServiceImpl 메서드를 호출하면서 위임한.. 독서/토비의 스프링 2023. 2. 18. 토비의 스프링 Vol.1 5장 서비스 추상화 실습 코드는 아래에서 확인 가능합니다. https://github.com/happysubin/book-study/commits/main GitHub - happysubin/book-study Contribute to happysubin/book-study development by creating an account on GitHub. github.com 5.1 사용자 레벨 기능 추가 이전 시간까지는 UserDao에서 User 객체를 단순히 CRUD 하는 작업만 가능했는데, 이번 파트 부터는 특별한 비즈니스 로직을 추가했다. UserDao에서 User 객체를 모두 가져와서 일정 방문 횟수와 추천 수를 넘기면 User 객체의 레벨을 올리는 로직이다. 레벨을 나타내기 위해 Enum을 사용했다. 이번 파트에서.. 독서/토비의 스프링 2023. 2. 17. 토비의 스프링 Vol.1 2장 테스트 2장은 테스트에 관련된 내용입니다. 실습은 아래에서 확인할 수 있습니다. https://github.com/happysubin/book-study/commit/d31fcf6587d719e39cb28e62abc7ff7634b7c179 Feat: 토비의 스프링 2장 학습 마무리 · happysubin/book-study@d31fcf6 Show file tree Showing 4 changed files with 127 additions and 33 deletions. github.com 스프링이 제공하는 가장 중요한 가치는 객체지향과 테스트다. 이번 2장에서는 스프링이 제공하는 가장 중요한 가치 중 하나인 테스트에 대해 살펴본다. 애플리케이션은 요구사항이 들어오면서 변하고 복잡해진다. 테스트 코드를 잘 작성.. 독서/토비의 스프링 2023. 2. 14. Spring Rest Docs 트러블 슈팅 스프링 진영에서는 API 명세서로 사용하는 대표적인 두 가지가 있다. 바로 Swagger와 Spring Rest Docs다. 간단하게 설명하면 Swagger는 도입이 매우 편리하지만 운영 코드가 지저분해지고 기능적인 보장을 할 수 없다. Spring Rest Docs는 테스트를 기반으로 작성되므로 운영 코드가 지저분해지지 않고 기능적인 보장을 한다. 다만 적용하는데 꽤 많은 시간이 소요된다. 저번 동아리 프로젝트는 빠르게 개발을 해야하므로 Swagger을 도입했었다. 이번에는 졸업 프로젝트를 하면서 새로운 기술을 도입해보고 싶었기에 Spring Rest Docs를 도입하기로 결정했다. 이번 포스팅에서는 구체적인 도입 방법보다는 트러블 슈팅과 해결 과정을 기록하려고 한다. Spring Rest Docs를 .. 기록 및 회고 2022. 9. 1. 우아한 스프링 부트 공부 기록 스프링 부트 스프링 부트는 스프링을 쉽게 제공하기 위해 제공되는 툴이다. 참고로 스프링이란 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크다. 스프링 부트가 제공하는 3가지 큰 영역 빌드 : 프로젝트 생성, 의존성 관리, 애플리케이션 패키징 및 실행 코딩 : 개발 툴 제공, 자동 설정, 외부 설정 배포 및 관리 : 도커 이미지 생성, Actuator, 스프링 부트 어드민 빌드 프로젝트 생성 https://start.spring.io/ 여기에서 스프링 프로젝트를 만든다. 들어가면 다음과 좌측면에 같은 화면이 나온다. 스냅샷(SNAPSHOT)은 개발 중인 버전. 가급적이면 사용하지 말자. M(Milestone) 버전 배포는 했지만 바뀔 수 있는 버전. 공부하지 않는 이상 사용하.. 개발/Spring Boot 2022. 7. 30. 토비의 스프링 Vol.1 3장 템플릿 3장은 템플릿에 관련된 내용입니다. 템플릿이란 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 기법이다. 3.1 초난감 DAO 예외 처리 우리는 1장에서 초난감 DAO를 멋지게 리팩토링했다. 전략 패턴을 바탕으로 추상화에 의존하며, DI를 바탕으로 OCP(개방폐쇄 원칙)을 지키도록 했다. 또한 관심사를 멋지게 분리해냈다. 그러나 저번 시간에 잠깐 언급했는데 예외 처리에 관한 부분을 다루지 않았다. 잠깐만 UserDao 실습 코드를 살펴보자. PreparedStatement ps = connection.prepareStatement("delete from user.. 독서/토비의 스프링 2022. 7. 23. 토비의 스프링 Vol.1 1장 오브젝트와 의존관계 2023.02.13 복습 및 정리 실습 레포는 아래와 같습니다. https://github.com/happysubin/book-study/tree/main/%ED%86%A0%EB%B9%84%EC%9D%98%20%EC%8A%A4%ED%94%84%EB%A7%81 이번 포스팅은 토비의 스프링 3.1 1장에 관한 학습 기록입니다. 1장 도입부 자바는 객체지향 언어다. 우리가 학습하는 스프링은 자바를 기반으로 한 프레임워크다. 자바를 기반으로 만들어진 기술, 스프링이 제일 중요하게 여기는 핵심 가치는 바로 객체지향적인 프로그래밍이다. 그러므로 스프링은 오브젝트(객체)에 제일 관심을 많이 둔다. 오브젝트 간의 관계에 집중하며, 라이프 사이클에 집중한다. 더 나아가서는 오브젝트 설계, 어떤 단위로 만들어지는지까지 관.. 독서/토비의 스프링 2022. 7. 21. 스프링 AOP 주의사항 본 게시글은 인프런 김영한 선생님 강의 스프링 고급편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8/dashboard 스프링 핵심 원리 - 고급편 - 인프런 | 강의 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 포스팅을 하지는 않았지만 스프링 AOP를 배우면서 스프링 AOP 구현 방법을 배웠고, 어드바이스와 포인트컷에 관한 구체적인 내용을.. 개발/Spring Core 2022. 7. 12. @Aspect AOP 본 게시글은 인프런 김영한 선생님 강의 스프링 고급편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8/dashboard 스프링 핵심 원리 - 고급편 - 인프런 | 강의 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 우리는 저번 포스팅 마지막 부분에서 자동 프록시 생성기가 어드바이저를 자동으로 스프링 빈으로 등록시키는 것을 학습했다. 스프링은 .. 개발/Spring Core 2022. 7. 9. 스프링 빈 후처리기 본 게시글은 인프런 김영한 선생님 강의 스프링 고급편을 완강하고 배운 것을 남기고자 적은 포스팅입니다. 강의 링크는 아래와 같습니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8/dashboard 스프링 핵심 원리 - 고급편 - 인프런 | 강의 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 스프링 빈 후처리기 필자는 이전에 스프링 기초를 학습하면서 스프링 컨테이너에 빈이 등록될 때 순수한 빈 인스턴스가 아니라, CGL.. 개발/Spring Core 2022. 7. 8. Spring Interceptor 경로에서 Swagger 경로 제거 시 발생 오류 UMC 동아리에서 앱을 만드는 팀 프로젝트를 진행 중인데 한 가지 오류가 발생했다. 바로 JWT를 사용해서 로그인을 진행할 때 스프링 인터셉터를 사용 중인데 스웨거 경로를 exclude하자 오류가 발생했다. 파파고로 내용을 해석하면 아래와 같았다. "기본 URL을 유추할 수 없습니다. 이는 동적 서블릿 등록을 사용하거나 API가 API 게이트웨이 뒤에 있을 때 흔히 발생합니다. 기본 URL은 모든 스웨거 리소스가 제공되는 루트입니다. 예를 들어 http://example.org/api/v2/api-docs에서 api를 사용할 수 있는 경우 기본 URL은 http://example.org/api/입니다. 위치를 수동으로 입력하십시오." 처음 파파고를 돌려보고 '뭔 소리지..?'라는 생각이 들었다. 기존에 .. 개발/Spring MVC 2022. 7. 8. 이전 1 2 다음 반응형