본문 바로가기
반응형

분류 전체보기179

@Component는 어떻게 동작하는 걸까? 실무에서 @Component로 Bean을 편리하게 만들어줘서 사용하고 있지만, 동작 원리부터 어떤 식으로 작용하는지 궁금했습니다. 일단 @Component를 쓰기 위해서는 @ComponentScan과 @Configuration을 알아야 합니다. @Configuration는 간단하게 이야기하자면 해당 클래스는 설정파일이라고 인식시켜 주는 것입니다. Bean Object 생성 이상으로 전체 애플리케이션을 구성하는 가장 중요한 기능들을 넣을 수 있습니다. @ComponentScan는 @ComponentScan를 적용한 해당 클래스 아래에 있는 @Component가 붙은 모든 클래스들을 Bean으로 등록할 수 있게 도와줍니다. 필요하다면 의존 Object를 찾아서 생성자를 찾아 파라미터로 넘겨주기도 합니다. @.. 2023. 1. 24.
221. Maximal Square 진짜 오래간만에 알고리즘을 풀어봤습니다! 오래간만에 풀어보니, 어렵네요... https://leetcode.com/problems/maximal-square/ Maximal Square - LeetCode Maximal Square - Given an m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. Example 1: [https://assets.leetcode.com/uploads/2020/11/26/max1grid.jpg] Input: matrix = [["1","0","1","0","0"],["1", leetcode.com 문제 자체는 심플합니다. 해당.. 2023. 1. 9.
2022년의 회고록은 성장의 해 https://applepick.tistory.com/122 2021 회고록이라 쓰고 취준의 해라고 읽는다. 벌써 2020년 회고록을 작성한 지 얼마 안 된 것 같은데... 2021년이 다 지나가고 있습니다... 과연 1년 동안 무엇을 성취했는지, 더 좋은 성장 방향성을 위해 회고록을 작성하게 되었습니다. 2021년도 applepick.tistory.com 작년은 취준의 해, 올해는 성장의 해였던 것 같습니다.(아직 많이 부족하지만....) 지금 이 글을 작성하는 2022년 12월 31일 카페에 앉아서 회고록을 작성해보려고 합니다. 올해 정말 바쁜 일 년 보낸 것 같습니다. 성장 저는 취업하기 전에 스타트업에서 인턴 하면서 Node와 Django 위주로 사용해서, Spring을 하나도 몰랐습니다. 사실 .. 2022. 12. 31.
이팩티브 자바 아이템2 IllegalArgumentException IllegalArgumentException는 RuntimeException을 상속받고, 어떤 Argument가 잘못되어있는지 예외를 던지는 클래스입니다. if (deliveryDate.isBefore(LocalDate.now())) { throw new IllegalArgumentException("deliveryDate can't be earlier than " + LocalDate.now()); } RuntimeException을 상속 O -> Unchecked Exception RuntimeException을 상속 X -> Checked Exception checked exception과 unchecked exception의 차이점? checked exception은 다시 checked excep.. 2022. 10. 30.
이팩티브 자바 아이템1에서 열거타입 Enumeration 1) 상수 목록을 담을 수 있는 데이터 타입 2) 타입 세이프티를 보장할 수 있습니다. 3) 싱글톤 패턴을 구현할 때 사용하기도 합니다. 자문자답 간단하게 주문 상태를 가지고 있는 enum 클래스를 구성해보았습니다. public enum OrderStatus { PREPARING, SHIPPED, DELIVERING, DELIVERED; } 1. 특정 enum 타입이 가질 수 있는 모든 값을 순회하여 출력할 수 있는가? public static void main(String[] args) { System.out.println(Arrays.stream(OrderStatus.values()).collect(Collectors.toList())); } Enumeration의 values를.. 2022. 10. 9.
[지구최강 JPA 스터디] 8-9주차 JPA의 프록시 활용 JPA에서의 프록시는 어떻게 사용하는지 정리해보겠습니다. 간단한 이해를 돕기 위해 이전에 작성했던 포스팅 정보를 첨부해놓겠습니다. https://applepick.tistory.com/159 프록시 패턴과 데코레이터 패턴 인프런 스프링 고급 원리를 들으면서 프록시 패턴과 데코레이터 패턴을 공부하고 있습니다. "둘이 뭔가 비슷한데? 뭐가 다른거지? 정확하게 어떠한 상황에서 사용해야 할까?"라고 느껴 정리를 applepick.tistory.com 프록시 특징 실제 클래스를 상속받아서 만들어집니다. 사용하는 입장에서 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됩니다.(때에 따라서...) 프록시 객체는 실제 객체의 참조(Target)를 보관합니다. 프록시 객체는 처음 사용할 때 한 번만 초기화 프록시.. 2022. 10. 8.
최근 근황(+디프만 지원후기) 1) 회사 일을 열심히 하고 있다... 사실 세금 도메인은 처음 접해보지만 재미있는 것 같다. 법과 관련된 비즈니스가 많아서 정말 복잡했다. 초기에는 법령을 조금 뒤져보는 재미가 있었다. 틈틈이 모던 자바 인 액션이라는 책을 보고 있는데 정말 어렵다... 언젠가는 득도하는 날이 오겠지하고 읽고있다. 2) 회사 동기들과 JPA와 Spring을 스터디하고 있다. 혼자서는 놓칠만한 내용들을 동기들과 토론하면서 조금 더 깊게 생각할 수 있어서 좋다. 회사에서 비용이나 기타 일정부분을 지원해줘서 이 부분은 정말 좋은 것 같다. 3) 우연히 회사 동기 형이 디프만이라는 사이드프로젝트 동아리가 있다고 이야기해줬다. 처음에는 직장인 동아리인가 해서 직접 검색했는데 모집 중인 것을 보고 바로 간단한 자기소개글을 작성해서.. 2022. 10. 3.
주문조회 페이징 처리 API 설계하면서 고민했던 점 및 트러블 슈팅 JPA에서 페이징 처리를 공부하면서 적용해봤습니다. 배경을 설명해드리자면, 주문 조회 시 시작 날짜와 종료 날짜를 입력받아 페이징 처리하여 보여주는 기능을 구현했습니다. package assignment.shop.order.repository; import assignment.shop.order.Order; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.tim.. 2022. 9. 24.
[Spring + JPA] 동시성 문제를 해결해보자! 서버에서 여러 트랜잭션에서 동시에 같은 데이터를 변경하려고 시도할 경우 데이터 요청이 일부 유실될 수 있습니다. 이것은 큰 장애로 커질 수 있는데요. 예를 들어 상품이 100개인 상품이 있다고 가정해봅니다. 서로 다른 5명이 동시에 100개를 동시에 주문할 경우 한 명의 주문만 성공해야 합니다. 5명의 주문이 성공할 경우 큰 장애로 이어집니다. 이런 이슈를 JPA의 락 기능을 통해서 동시성 문제를 해결해보려고 합니다. 이슈 동시에 여러 트랜잭션을 통해 주문이 들어올 경우 주문이 모두 성공하는 이슈가 있었습니다. 해당 상품으로 테스트를 진행해보겠습니다. 상품 테이블에 맥북의 재고가 100개가 저장되어있습니다. 아래 테스트 코드를 보면서 문제점을 확인해봅니다. package assignment.shop.co.. 2022. 9. 9.
반응형