목록코딩/Spring (104)
보라코딩
좋은 예외(Exception) 처리좋은 예외 처리는 견고한 프로그램을 만들고, 좋은 사용자 경험을 줄 수 있다. 예외 처리를 통해 애플리케이션이 예기치 않게 종료되는 것을 방지하고, 갑작스런 종료 대신 사용자는 무엇이 잘jojoldu.tistory.com 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코jojoldu.tistory.com HTTP API 디자인 - URI편마틴 파울러의 블로그를 가보면 Leonard Richardson이 제안한 HTTP API 성숙도 모델 (Richards..
try-with-resources 자바에서 자원을 관리하는 효율적인 방법 중 하나이 구문을 사용하면 파일이나 네트워크 연결과 같은 자원을 자동으로 닫아주기 때문자바 7부터 도입된 이 기능은 자원을 사용한 후에 명시적으로 닫아줘야 하는 번거로움을 줄여줌try-with-resources는 AutoCloseable 인터페이스를 구현한 모든 객체에 사용할 수 있습니다. 왜냐하면 AutoCloseable 인터페이스에는 close() 메소드가 정의되어 있으며, try-with-resources 구문이 종료될 때 자동으로 이 메소드가 호출되기 때문입니다. 이 구문의 사용은 매우 간단합니다. try 괄호 안에 자원을 선언하면, 해당 블록의 실행이 끝나면 자동으로 자원이 닫힙니다. 왜냐하면 자바 런타임이 자동으로 cl..
Lazy 로딩을 사용할 때 N+1 문제가 발생하지 않는 이유 Lazy Loading (지연 로딩) 동작 원리지연 로딩 설정: JPA에서는 연관 관계를 지연 로딩으로 설정할 수 있습니다. 이는 연관된 엔티티를 실제로 사용할 때까지 데이터베이스에서 가져오지 않고, 필요할 때 로딩하는 방식입니다.Proxy 객체 생성: Lazy 로딩이 설정된 연관 관계는 실제 엔티티 대신 프록시(proxy) 객체를 반환합니다. 프록시 객체는 실제 엔티티를 대신하여 필요한 시점에 데이터베이스에서 엔티티를 로딩하는 역할을 합니다.첫 번째 쿼리 실행: 예를 들어, 부모 엔티티를 조회할 때 연관된 자식 엔티티는 초기에 로딩되지 않고, 대신에 해당 자식 엔티티들에 대한 데이터베이스 쿼리가 발생하지 않습니다. 대신, 부모 엔티티의 필드..
AOP (Aspect-Oriented Programming)는 프로그래밍에서 코드를 재사용하기 쉽게 만드는 기법입니다. 특히, 여러 곳에서 반복되는 관심 사항(예: 로깅, 보안, 트랜잭션 관리 등)을 한 곳에서 관리할 수 있도록 도와줍니다. AOP를 사용하면 코드의 중복을 줄이고 유지보수성을 높일 수 있습니다. 1. 프록시 객체의 역할프록시 객체는 스프링 AOP에서 중요한 역할을 합니다. 주로 다음과 같은 상황에서 사용됩니다:트랜잭션 관리: @Transactional 어노테이션이 붙은 메소드의 경우, 스프링은 해당 메소드를 호출할 때 프록시 객체를 생성하여 메소드 실행을 감싸고 트랜잭션 관리를 수행합니다.보안 제어: 특정 사용자가 접근할 수 있는 메소드를 제어하기 위해 프록시 객체를 사용하여 접근 권한..
MapStruct란? Java bean 유형 간의 매핑 구현을 단순화하는 코드 생성기 매핑 코드를 자동으로 생성해주어 반복적인 매핑 작업 효율적으로 처리 DTO와 Entity간의 매핑을 편리하게 도와주는 도구 MapStruct 사용 방법 * 의존성 추가 ⭐ 주의 : Lombok 뒤에 MapStruct dependency 선언 필요 MapStruct는 Lombok의 getter, setter, builder를 이용해서 생성되기 때문 dependencies { ... implementation 'org.mapstruct:mapstruct:1.5.3.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' ... } 1. 기본 사용 ..
좋은 강의다 :) 강의가 짧은데 간단명료해서 스프링 시큐리티 공부하기 좋음!
주말동안 들었는데 공부하기 좋았다 :) 대략적으로 알고는 있는데 잘 모를 때 듣기 좋은 강의 ㅎ.ㅎ
인프런에서 들은 테스트코드 강의인데 매우 인상깊었다. 조금 아쉬운 점은 Mock을 사용하지 않아서 그 부분은 따로 공부해야 하는데 전체적인 테스트를 어떻게 진행해야 하는지 배울 수 있어 좋았고 테스트코드가 정책이 될 수 있다는 점을 알았다. 단순한 테스트 강의가 아닌 아키텍처에 대한 내용들도 함께 다루어서 헥사고날 아키텍처에 대한 감을 잡을 수 있어서 더 좋았다. 배운 것을 토대로 더 많은 것에 관심을 갖고 재미있게 공부할 수 있을 것 같다. GitHub - kok202/test-code-with-architecture: test code with architecture의 데모 프로젝트 test code with architecture의 데모 프로젝트. Contribute to kok202/test-co..
WebSocketConfig (WebSocket, Stomp 설정) implementation 'org.springframework.boot:spring-boot-starter-websocket' @Configuration // Config로 지정 @EnableWebSocketMessageBroker // 웹소켓 사용하는 브로커 활성화 public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config){ // 클라이언트에게 topic으로 시작하는 것에 대한 구독 기능 제공 config.enableSimple..
JWT (JSON Web Token) 클레임이라고 불리는 정보를 JSON 형태로 안전하게 전송하기 위한 토큰 - 인증과 정보 교환에 사용, 서명이 되어 있어서 신뢰성 확보가 가능 1. Header : 토큰의 타입과 사용된 알고리즘 정보를 담고 있음, Base64Url로 인코딩 2. Payload : 클레임 정보, 대상, 발행자, 만료 시간 등 다양한 정보가 포함됨, Base64Url로 인코딩 3. Signature : Header과 Payload, Secrey Key를 사용하여 생성된 서명 [ 장점 ] - 상태 유지 X - 간단하고 자기 포함적 - 확장성 [ 단점 ] - 크기 : 클레임이 많을수록 토큰 크기가 커짐 - 보안 : 서명은 되어 있지만 암호화는 되어있지 않음. 중요 정보 JWT에 포함하면 안됨..