BackEnd/Spring51 [Spring] 쓰레드 로컬 - ThreadLocal - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. ThreadLocal - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 쓰레드 로컬은 해당 쓰레드만 접근할 수 있는 특별한 저장소를 말한다. 쉽게 이야기해서 물건 보관 창구를 떠올리면 된다. 여러 사람이 동일한 물건 보관 창구의 직원에게 물건을 전달하면, 직원은 사용자를 인식해서 사용자별로 확실하게 물건을 구분해준다. 쓰레드 로컬을 사용하면 각 Thread마다 별도의 내부 저장소를 제공한다. 따라서 같은 인스턴스의 쓰레드 로컬 필드에 접근해도 문제 없다. thread-A 가 userA 라는 값을 저장하면 쓰레드 로컬은 thread-A 전용 보관.. BackEnd/Spring 2022. 8. 5. [Spring] 쓰레드 로컬 - ThreadLocal - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 필드 동기화 - 개발 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 지난번 구현에서는 트랜잭션ID 와 level을 동기화하기 위해서 TraceId를 파라미터로 넘기도록 구현했었다. 이를 파라미터로 넘기지 않고 해결할 방법은 없을까? 향후 다양한 구현체를 만들기 위해 우선 LogTrace 인터페이스부터 만들자. ▶ LogTrace public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus statu.. BackEnd/Spring 2022. 8. 4. [Spring] 예제 만들기 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 예제 프로젝트 만들기 - V0 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 아주 간단한 예제 프로젝트를 만들었다. 코드 설명할 부분도없다. ▶ OrderRepositoryV0 @Repository @RequiredArgsConstructor public class OrderRepositoryV0 { public void save(String itemId) { //저장 로직 if (itemId.equals("ex")) { throw new IllegalStateException("예외 발생!"); } sleep(1000); } priva.. BackEnd/Spring 2022. 8. 3. [Spring] 스프링의 3대 요소 (IoC/DI, PSA, AOP) Spring의 핵심적인 요소 3가지가 있다. 이에 대하여 잘 알고 있다 생각했는데, 막상 대답해주려니 생각보다 나의 생각을 전달하기가 어려웠다. 이번 기회에 3대 요소에 대하여 간단하게나마 정리를 해볼까 한다. IoC/DI PSA AOP 1. 공통 프로그래밍 모델 Application을 구성하는 객체(Bean)가 생성되고 동작하는 틀을 제공해줄 뿐만 아니라, 애플리케이션 코드를 어떻게 작성해야 하는지에 대한 기준도 제공한다. 이를 일반적으로 프로그래밍 모델이라고 부르는데, 스프링에서는 크게 3가지 핵심 프로그래밍 모델을 지원한다. 1-1) IoC/DI (제어의 역전/ 의존성 주입) IoC/DI는 객체의 생명주기와 의존 관계를 관리하기 위한 모델이다. ▶ 제어의 역전 IoC(Inversion of Cont.. BackEnd/Spring 2022. 7. 22. [Spring] Spring 환경변수 설정파일 선택하기 이번 글은 프로젝트를 진행하면서 문제가 됬었던 부분을 정리, 요약 하는 글 입니다. (미래의 나를 위해!) 1. 문제의 상황 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우리의 Spring 프로젝트에서 사용한 yml파일은 다음과 같습니다. spring: profiles: active: local datasource: url: ${datasource} driver-class-name: com.mysql.cj.jdbc.Driver username: ${username} password: ${password} jwt: token: validate-time: 1800 token-secret: "Shine-Lucid" kakao: token-server-uri: "https:/.. BackEnd/Spring 2022. 6. 12. [Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 2 그간 밀어오고 밀어왔던 내용에 대해 정리하고 넘어가야 겠다 싶어 정리하는 글 이다. 지난 글에서 @RequestBody에서 어떤 방식으로 객체를 생성하는 지 파악한 후, 이번 글에서는 객체에 값을 어떤 방식으로 binding 시키는지에 대하여 알아봅시다. 직접 디버깅을 하나하나 다 해가면서 작성 한 글 입니다... 혹 틀린 부분이 있다면 지적해주시면 감사하겠습니다! 우선 이 글은 2개의 글로 만들어질 예정 입니다. 1) 기본 생성자가 필요한 이유 2) Setter가 없어도 되는 이유 (이번글) 2. Setter가 없어도 되는 이유 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 기본 생성자로 Object를 생성하는데 setter없이 값을 어떻게 할당시킬까? 이에 대하여 알.. BackEnd/Spring 2022. 6. 12. [Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 1 그간 밀어오고 밀어왔던 내용에 대해 정리하고 넘어가야겠다 싶어 정리하는 글이다. 항상 무의식적으로 Client에게 데이터를 보내거나, 받을 때 일명 DTO를 사용하여 받아왔다. 난 너무나 자연스럽게? 혹은 무의식적으로 DTO에 @Getter를 선언하면서 사용해 온 것은 아닐까? 나는 이전에 과연 한 번이라도 이게 왜 그런지 이전에 궁금해한 걸까? 나 스스로에게 정말 반성하는 의미로 남기는 글이다. 왜 이게 당연하다 생각하고 호기심 있게 살펴보지 않았을까... 뒤늦은 후회감이 조금은 온다. 또한 @Getter는 왜 추가한 것일까? 값을 꺼내오려고?? 이러한 DTO를 Controller에서 받기 위해 @RequestBody를 사용해 왔다. 왜?? @RequestBody는 어떻게 DTO를 생성하는 것일까?? .. BackEnd/Spring 2022. 6. 11. [Spring] CORS 문제 해결하기 1. CORS " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1. CORS 란? CORS는 Cross-Origin Resource Sharing 의 줄임말로, 다른 출처의 리소스를 공유하는 것 을 의미합니다. 즉, 다른 출처 간의 자원을 공유하는 정책이라고 생각하면 된다. 따로 CORS를 설정해주지 않는다면 해당 리소스를 공유하지 못하는 문제가 발생하게 됩니다. 크롬에서 위와같이 No 'Access-Control-Allow-Origin' 이라는 경고나 발생하고 있다! 2. 출처 란? 그럼 출처는 뭘 의미하는 것 일까? 예를 들어 www.google.com 같은 URL은 여러 개의 구성 요소로 이루어져 있다. URL의 구성 요소 Protocol, Host, Path, Qu.. BackEnd/Spring 2022. 4. 26. [Spring] Thymeleaf 에러(Error resolving template) Thymeleaf 를 사용하면서, Intelli J에서 개발할 때(Local)는 이상없이 html를 정상적으로 찾아가서 보여주었는데, AWS(EC2)에서 bootjar로 build 하고 실행하면 아래와 같은 에러를 발생시키면서 화면에 접근하지 못 하는 경우가 생긴다. ERROR 로그를 읽어보면 template 인 "/user/login" 이라는 템플릿을 인식하지 못하여, 없는 파일이거나, 접근할 수 없다는 에러를 보여주고 있다. 검색해본 결과로는 Controller에서 view 이름을 return 하여 html 파일을 불러올때 경로가 문제였다. 이 에러를 해결하기 위해 경로에 "/" 를 제거하니 정상적으로 html 파일에 접근할 수 있었다. @GetMapping("/login") public String.. BackEnd/Spring 2022. 3. 19. [Spring] Transaction 동작 원리 (@Transactional 원리) 이 글의 최종 목적은 @Transactional 이 어떻게 돌아가는지를 알아보는 것 입니다. 하지만 우선적으로 JDBC에서 트랜잭션을 어떠한 방식으로 적용시키는지를 이해할 필요가 있습니다. 1. JDBC Transaction 이해하기 우선 대략적인 JDBC의 트랜잭션을 다루는 코드는 다음과 같습니다. import java.sql.Connection; Connection connection = dataSource.getConnection(); // (1) try (connection) { connection.setAutoCommit(false); // (2) // execute some SQL statements... connection.commit(); // (3) } catch (SQLException.. BackEnd/Spring 2022. 3. 9. [Spring] @SpringBootTest SpringBoot에서 테스트 시작하기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 Spring Boot는 애플리케이션을 테스트하기 위한 많은 기능을 제공해 줍니다! Spring boot에서 테스트 모듈은 spring-boot-test와 spring-boot-test-autoconfigure가 존재하는데, 대부분의 경우는 spring-boot-starter-test만으로도 충분하며, spring-boot-starter-test는 spring boot의 테스트에 사용되는 Starter 패키지입니다. spring-boot-starter-test는 JUnit는 물론이고, AssertJ, Hamcrest를 포함한 여러 유용한 라이브러리를 포함하고 있습니다. spring-boo.. BackEnd/Spring 2022. 3. 7. [Spring] 빈 스코프 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 빈 스코프란? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 빈 스코프란 말 그대로 빈이 생존할 수 있는 범위(기간)을 의미한다. 지금까지 공부했던, 스프링 컨테이너가 생성될때 같이 생성되서 ~ 스프링 컨테이너가 종료될때 까지 유지되는 범위는 싱글톤 범위이다. 스프링은 다음과 같은 다양한 스코프를 지원하고 있다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스.. BackEnd/Spring 2022. 2. 8. 이전 1 2 3 4 5 다음