본문 바로가기

Development

(98)
[개발 일기] Primary key 타입은 숫자랑 GUID(UUID)중에 어떤 걸 쓸까요? 설문조사 엔티티의 ID 타입은 숫자 Or GUID(UUID)? 졸업 프로젝트 진행중에 나왔던 대화 주제입니다.설문조사 게시글의 Id 타입을 무엇으로 할지... 사실 그 당시에는 GUID 타입에 대해서도 처음 접해봐서 잘 몰랐는데 지금 다시 떠올라서 GUID에 견해에 대해 써보려합니다. GUID(UUID)? GUID는 'Globally Unique Identifier'의 약자로, '전역적으로 고유한 식별자'라는 뜻입니다. GUID는 128비트의 크기를 가지며, 이는 전 세계 어디에서든 고유하게 생성될 수 있는 값을 의미합니다. GUID는 주로 여러 데이터베이스나 서버 간에 데이터를 고유하게 식별하거나 병합할 필요가 있을 때 사용됩니다. 예를 들어, 여러 서버에 분산되어 있는 데이터베이스에서 각 레코드를 고..
[Tip]테스트 코드를 작성하는 이유, Given When Then, FIRST 속성 테스트 코드 테스트 코드는 우리가 작성한 코드나 비즈니스 로직 자체를 테스트하기 위해 작성된 코드를 의미한다. Agile 방법론 중 하나인 TDD(Test Driven Development)도 등장한 만큼, 테스트 코드를 더 잘 작성하고 활용하기 위해 고민해 볼 필요가 있다. 테스트 코드의 중요성 개발 과정에서 문제를 미리 발견할 수 있다. 문제를 미리 발견함으로써 문제 상황을 실제 서비스 배포 이전에 방지할 수 있다. 문제가 발생할 수 있는 여러 상황에 맞춰 테스트 코드를 작성하는 것이 중요하며, 이를 통해 잠재된 문제를 발견하는 것에 도움이 된다. 일부러 오류가 발생할 수 있는 테스트 코드를 작성하여 예외 처리가 잘 작동하는지를 확인하거나, 정확히 의도한 비즈니스 로직에 맞춰 테스트 코드를 작성해서 ..
[Spring] Lombok Lombok (롬복) Lombok은 데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 getter/setter같은 메서드를 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다. 이는 반복되는 코드를 생략하여 가독성을 높여줄 수 있다. 또한 어노테이션 기반으로 코드를 자동 생성해주어 생산성이 높아진다. Lombok 의존성 추가 Gradle compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' build.gradle에 dependencies에 위 코드를 추가 Maven org.projectlombok lombok true pom.xml에 위 코드를 추가 Lombok의 주요 어노테이션 @Getter, @..
[개발 일기] OSIV가 false일 때 LazyInitializationExceptions 이거 때매 거의 이틀을 삽질했다.... 이해가 안되어서.... OSIV=false + getReferenceId - @Transactional = LazyInitializationExceptions 문제의 코드 @Override public Product selectProduct(Long number) { Product selectedProduct = productRepository.getReferenceById(number); return selectedProduct; }다음과 같이 getReferenceById()를 사용한 객체를 리턴하고, @Override public ProductResponseDto getProduct(Long number) { Product product = productDAO..
[Spring] OpenSessionInViewFilter Spring Boot에서의 Session Spring Boot에서 Session 은 서버와 클라이언트 간의 통신 상태를 유지하는 데 사용됩니다. Session은 사용자 정보, 로그인 상태, 장바구니 내용 등과 같은 데이터를 저장하는 데 사용할 수 있습니다. 세션 작동 방식 Spring Boot는 기본적으로 Tomcat 서블릿 컨테이너를 사용하며, Tomcat은 HTTP Session을 사용하여 Session을 관리합니다. HTTP Session은 클라이언트 컴퓨터에 저장되는 쿠키를 사용하여 식별됩니다. 세션 생성: 클라이언트가 서버에 처음 요청을 보내면 서버는 새 HTTP 세션을 생성하고 클라이언트 컴퓨터에 쿠키를 보냅니다. 쿠키에는 세션 ID가 포함되어 있으며, 클라이언트는 이후 요청에 쿠키를 포함하여..
[Spring] Controller와 API 구현하기 Controller 컨트롤러는 비즈니스 로직과 클라이언트의 요청을 연결하는 역할을 한다. 즉 컨트롤러는 클라이언트로부터 받은 요청에 대해 서비스 레이어에 구현된 적절한 메서드를 호출해서 결괏값을 받는다. @Controller와 @RestController @Controller와 @RestController는 Spring Framework에서 웹 컨트롤러를 만들 때 사용되는 어노테이션이다. 두 어노테이션 모두 컨트롤러 역할을 수행하지만 작동 방식과 처리하는 요청 유형에 있어 차이가 있다. * 아래는 Google Gemini 답변입니다. 기능 @Controller @RestController 기능 웹 요청 처리 웹 요청 처리 및 JSON 응답 자동 생성 반환 값 View 객체, ModelAndView, St..
[Spring] 빌드 관리 도구,Gradle과 Maven 빌드 관리 도구 빌드 관리 도구는 소스 코드에서 실행 가능한 애플리케이션을 자동으로 생성하는 데 도움을 주는 프로그램입니다. 이름에서 알 수 있듯이, 이는 다양한 작업을 개발하거나 스크립팅하는 데 중요합니다. 빌드 관리 도구는 다음과 같은 프로세스에 필요합니다. 빌드 툴은 임의의 명령을 실행합니다: 각 배포 시나리오는 독특하며, 각자가 파일을 다른 폴더로 복사하거나, 다른 형식으로 압축하거나, 다른 방식으로 정리해야 할 필요가 있습니다. 한 명령의 결과를 다른 명령에 적용합니다: 빌드는 거의 항상 여러 단계의 과정입니다. 소스 코드에서 문서를 생성합니다 . 소스 코드를 컴파일합니다 수집된 코드를 JAR 파일로 패키징합니다 패키지된 코드를 로컬/중앙 리포지토리 또는 서버에 설치합니다. 빌드 관리 도구에는 ..
[Spring] Spring Data JPA에서 getReferenceById vs findById (지연로딩과 즉시로딩) Spring Data JPA로 데이터의 조회를 구현할 때, 사용할 수 있는 메서드중, getReferenceById와 findById 두 메서드가 있습니다. 이 글에서는 이 둘의 차이점을 비교해보려 합니다. getRefereceById (구: getOne(ID), findOne(ID), getById(ID)) 내부적으로 EntityManager의 getReference() 메서드를 호출합니다. getReference() 메서드를 호출하면 Proxy 객체를 리턴합니다. 실제 쿼리는 Proxy 객체를 통해 최초로 데이터에 접근하는 시점에 실행됩니다. (지연 로딩(Lazy Loading)) 이때 데이터가 존재하지 않는 경우에는 EntityNotFoundException이 발생합니다. 아래는 실제 구현체 코드입..