본문 바로가기

서버47

자바에서 람다를 사용하는 방법 0. 개요 - 자바에서 람다를 잘 써보고 싶은 마음에 본 포스팅을 준비했습니다. - 우선 람다를 이해하기 위해서는 기본적인 인터페이스에 대한 이해도가 필요합니다. - 인터페이스를 시작으로 람다에 대해 배워봅시다! 1. 인터페이스를 매개변수로 받는 메서드 - 인터페이스를 매개변수로 받으면 어떻게 될까? - 한번도 의식적으로 사용해 본 적도, 생각해 본 적도, 고민해 본 적도 없는 질문이다. - 다음 코드를 보자. 예시코드 public static void main(String[] args) { static void sound(PrintThing printThing) { printThing.print(); } } public interface PrintThing { void print(); } - 위의 코드.. 2023. 6. 26.
10. 배포 완료 1. SAI의 RestAPI 서버를 소개합니다. https://restsai.herokuapp.com/sai-api Swagger UI restsai.herokuapp.com - 올해 6월에 시작하여, 4개월이 지난 오늘 드디어 프로젝트 SAI RestAPI 서버의 마침표를 찍었다. - 개발 기간은 4개월이지만, 여기까지 오는데 2년이 걸렸다. - 지난 2년 동안 매일을 실수하고 개선하고 실패하고 도전하고 배우고 연습하며 스스로의 멱살을 부여잡고 왔다. - 이전에 무언가 꾸준히 하는 것을 은은하게 달리는 것이라 표현했는데, 은은하기 보다는 꽤나 치열했다. - 이제 유종의 미를 거둘 시간이다. 좋은 결과가 있기를 바란다. 2022. 9. 14.
9. 개선사항(비즈니스 로직 제거, Exception Handler 적용, DataIntegrityViolationException 처리 방법) 0. 개요 - 우연한 기회로 SI 업체에 면접을 보러 가게 되었다. - 많은 기대는 하지 않았지만, 기대 이상으로 면접 경험이 좋았다. - 문답 형식의 이론 질문이 없었고 코드를 보여주고 해당 코드를 분석하는 방식의 면접이었다. - 확실히 다른 사람이 작성한 코드에서 그 맥락을 모른 체 문제점을 파악한다는 것은 아직은 쉽지 않다. - 면접에서 내가 작성한 사이(SAI)의 코드를 보면서 RestAPI, Java, Spring에 관련된 질문을 받았다. - 그 과정에서 몇 가지 프로젝트의 개선사항을 듣게 되었고 하나씩 개선해보았다. 1. 비즈니스 로직은 Service에서 처리하자. a) 고민은 개선의 시작 - 사실 SAI를 만들면서 방법론적인 고민을 많이 했다. - 그중 하나가 비즈니스 로직의 기준에 대한 고.. 2022. 9. 12.
3. 요구사항 정의 및 개발 명세서 작성 0. 요구사항 정의 및 개발 명세서 작성 - 요구사항과 개발 명세서 작성은 가장 구체적이면서도 귀찮은 과정이다. - 머리 속에만 존재하던 추상적 아이디어를 현실 세계에 꺼내놓는 작업이기 때문이다. - 웹 애플리케이션 사이가 어떤 모습으로 완성될지 기대된다. - 동시에, 이 많은 작업을 나 혼자서 감당할 수 있을지도 의문이다. - 요구사항 명세서는 다음과 같은 구성으로 되어있다. → sheet 1: 페이지 구성 → sheet 2: 세부 기능 명세 → sheet 3: 개발 과정 타임라인 - 아래의 링크를 통해서 요구사항 명세서를 확인할 수 있다. - 앞으로 해당 문서에서 계속하여 변경사항 등을 업데이트할 예정이다. https://docs.google.com/spreadsheets/d/1BZaCrvZ1CDQf.. 2022. 6. 11.
Query DSL이란? 0. 개요 - 이번 포스팅은 Query DSL에 대해서 간략하게 알아볼 예정이다. - JPA를 조금 더 효율적으로 사용하고 싶다면 Query DSL에 대해서 알아보자. http://querydsl.com/ 2022. 6. 8.
Spring Data JPA란? 0. 개요 - 이번 포스팅은 Spring Data JPA에 대해서 간략하게 알아볼 예정이다. - JPA를 조금 더 효율적으로 사용하고 싶다면 Spring Data JPA에 대해서 알아보자. https://spring.io/projects/spring-data-jpa Spring Data JPA Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered ap.. 2022. 6. 7.
OSIV(Open Session In View) 0. 개요 - 지금까지 JPA 기본 개념에 대해서 알아보았다. - 이번 포스팅은 JPA의 마지막 개념인 OSIV에 대해서 알아보자. 1. OSIV(Open Session In View) a) OSIV 란? - Open Session In View란, 하이버네이트 또는 JPA를 지칭하는 이름이다. - JPA는 Open Entity Manager In View이라 불리기도 하는데, 관례상 OSIV로 통일하여 부른다. b) OSIV 사용 설정 - JPA를 사용하면 Spring에서 기본적으로 spring.jpa.open-in-view의 옵션 값을 TRUE로 설정한다. - 이는 OSIV 옵션을 사용한다는 의미로, JPA 프로젝트 빌드 시점에 다음과 같은 warn 로그에서 확인할 수 있다. c) OSIV의 기능 -.. 2022. 6. 7.
API 조회 성능 최적화 - 컬렉션(DTO 직접 조회) 0. 개요 - 이번 포스팅에서는 DTO를 직접 사용하여 컬렉션을 조회하는 방식에 대해서 알아보자. 1. DTO 직접 조회 준비 a) DTO 직접 조회의 의미 - 단일 조회 시 DTO를 직접 사용한 조회 방법과 동일하게 컬렉션도 DTO를 사용하여 직접 조회할 수 있다. - DTO 직접 조회 방식의 핵심은 Entity를 전혀 사용하지 않고 오직 DTO만을 이용하여 데이터를 받아오는 것이다. - 즉, Entity를 조회하고 그 데이터를 이용하여 DTO를 생성 및 반환하는 작업이다. - 언뜻 보면 DTO 변환 방식과 특별한 차이점을 못 느낄 수도 있다. - 그러나 DTO 직접 조회 방식은 API 메서드에서 오직 DTO만을 사용한다는 것이 특징이다. b) 준비 작업 확인 - 우선 DTO 변환을 이용한 조회 메서드.. 2022. 6. 4.
API 조회 성능 최적화 - 컬렉션(Fetch Join + 페이징 + Batch Size) 0. 개요 - 이전 포스팅에서 Fetch Join을 사용하면 페이징을 사용할 수 없다는 것을 배웠다. - 그러나 개발을 하다 보면 Fetch Join과 페이징이 함께 필요한 경우가 발생할 것이다. - 이러한 상황에서 어떻게 페이징을 구현할 수 있는지 알아보자. 1. Fetch Join + 페이징 사용 불가 a) 근본적인 이유 - Fetch Join은 일대다(= OneToMany) 조인에서 사용된다. - 일대다(= OneToMany) Join의 목적은 일(= One)을 기준으로 Join 하는 것이다. - 그러나 DB는 다(= Many)를 기준으로 Join 하므로 결과 데이터가 다(= Many)의 개수만큼 생성된다. - 이처럼 결과 데이터의 증가로 인해, 데이터의 순서가 뒤틀리게 되어 페이징을 사용할 수 없.. 2022. 6. 3.