일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSUS
- 비전공자 git
- 개인 프로젝트 개발일지
- California State University Sacramento
- 해외유학
- 만다라트프로젝트
- 부산외대
- 복수학위제도
- 파이데이아창의인재학과
- 2+2
- 케네스
- F1학생비자
- 유학생대학생활
- 자바
- 미국대학생활
- Java 스터디
- 개발일지
- 자바 스터디
- Kenneth Park
- 사이드프로젝트
- java
- jpa
- 미국유학생활
- i-20
- 미국유학
- 케네스로그
- JVM아키텍처
- 미국유학생
- 유학생 준비물
- 미국대학
- Today
- Total
목록전체 글 (87)
케네스로그
자바의 객체, DB테이블의 각 연관관계는 어떻게 다른가? 또, JPA는 어떻게 이런 불일치를 조율해주나? ORM기술은 DB의 테이블 중심 패러다임과 Java의 객체지향 패러다임의 불일치를 해결하기 위해 소개되었다. 인프런의 김영한님의 강의를 들으며 JPA를 접하고 프로젝트를 진행하였지만, 각 연관관계와 그 설정이 실제 코드에 어떻게 반영되는지, 테이블 구조가 어떻게 적용되는지 궁금하여 이번 기회에 직접 코드를 작성하고 DB 상태를 확인해보았다. 연관관계 ORM기술은 객체와 테이블 중심의 각기 다른 패러다임에서 발생하는 문제를 해결하기 위해 등장했으며, 이를 통해 개발자는 서비스 로직을 짜면서 객체에 온전히 집중하여 개발할 수 있게 되고, DB의 테이블에 대한 고민을 최소화 할 수 있다. 서로 다른 패러다..
나는 내 졸업장이 부끄럽다.컴퓨터공학을 전공하며 CS쪽을 공부해왔고 좋은 성적으로 졸업했지만, 이력서에 ‘컴퓨터공학 전공’을 기입하는게 부끄러웠다. 엔지니어 또는 개발자가 무엇인지, 그 직함이 가진 무게에 대해 고민하지 않았고 단순히 시험 잘 보고 좋은 성적으로 졸업하면 되는 것이라 생각했다. 이런 접근으로 졸업하던 시점에 쓸만한, 그리고 그럴듯한 프로그램을 만들어보지도 못했다. 기술이라는 지식을 수동적으로 습득했을 뿐, 기술을 통해 새로운 가치를 만들어보지 못했다. 졸업 전후로 데이터분야에 관심이 생겨 국비과정도 이수하고 프로젝트도 나름 진행해봤었다. 결과물은 신기했지만, 그 과정에서 스스로 몰입하기 힘들었고 능동적으로 임하지 못했다. 분석쪽으로 커리어를 밟는게 맞는지 확신을 가질 수 없었다. 그저 미..
JPA N+1, 불필요한 쿼리를 줄여보자 이전 포스팅에서 트랜잭션을 고려한 리팩토링을 통해 불필요한 쿼리를 줄이는 작업을 진행했다. 모든 controller - service layer에서 예제 코드처럼 작성되었던 것은 아니었지만 몇몇 케이스가 존재했기에 개선작업을 수행했다. 그럼 이제 모두 끝난 것인가?🤔 어림도 없다. 개선작업에는 끝이없다. 이번에 풀어볼 N+1문제 이외에도 캐싱을 사용한다거나 아키텍쳐 레벨에서도 개선이 진행가능할 것으로 보인다. 차차 해결하는 것으로 하고, 이번 포스팅에서는 엔티티 간의 관계에 따른 추가 쿼리가 발생하는 N+1이슈를 분석하고 개선하도록 하자. 프로젝트의 엔티티 관계 우리 팀에서 기획/개발했던 프로젝트는 간단한 형식의 회원제 게시판이다. 이 글에서는 기술적으로 분석하고..
엔티티를 정의하면서 궁금했었고, SpringDeepDive 스터디에서 나왔던 질문이었다. @Column(nullable=false)와 @NotNull 두가지의 null 방지 어노테이션을 사용할 수 있다. 과연 실제 코드에서는 어떤 차이를 보일까? @Column과 @NonNull jakarta.persistence의 @Column(nullable=false)의 설명은 다음과 같다. Specifies the mapped column for a persistent property or field. If no Column annotation is specified, the default values apply. Whether the database column is nullable. lombok의 @NotNul..
JPA, 왜 쿼리가 이리도 많이 발생할까? 최근 팀프로젝트를 진행하면서, 처음으로 JPA를 활용해서 프로젝트를 진행했다. 모든게 처음이었던지라 동작하는 코드를 목표로 주먹구구식으로 개발을 진행했다. 뚝딱거리며 만들고보니 어떻게.. 간신히 동작은 하는(?) API서버를 만들 수 있었다. 이제 내가 해야야할일은 리토팩링. 지금에서야 작성된 코드를 리뷰해보니 굉장히 부끄러운 점이 많았다. Controller - Service 구분이 명확히 되어 있지 않다. Transaction 범위를 고려하지 않고 작성된 코드들로 인해 불필요한 쿼리가 발생한다. 지연로딩에 대한 N+1문제가 발생한다. 현재 파악된 문제는 위와 같으며 하나씩 문제를 풀어나가고 있다. 이 포스팅에서는 불필요한 쿼리를 제거하는 작업에 대한 기록을 ..
HTTP version HTTP 0.9 - 1991 HTTP 초기버전 GET /mypage.html 요청은 단일 라인으로 구성되며, GET 메소드만 존재 A very simple HTML page 응답도 단순히 파일 내용만으로 구성 HTTP 헤더가 없고 HTML파일 전송만 가능 HTTP 1.0 - 1996 GET /mypage.html HTTP/1.0 User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) HTTP 헤더가 추가되어 메타데이터를 포함할 수 있으며, 프로토콜을 유연하고 확장 가능하게 됨 버전 정보와 요청 method가 함께 전송 200 OK Date: Tue, 15 Nov 1994 08:12:31 GMT Server: CERN/3.0 libwww/2.17 Content-T..
HTTP Cache 캐시 자주 사용되는 데이터를 임시로 복사해두는 임의의 장소 HTTP에서의 캐시? 웹 사이트의 로딩 시간을 개선하기 위해 사용! JS, CSS와 같은 파일은 자주 변하지 않기때문에 캐싱을 통해 불필요한 네트워크 비용 발생 방지 HTTP 캐시의 종류 Private Cache 브라우저에 저장되는 캐시 외부에서 접근이 불가하며, Authorization 헤더가 포함되면 private cache에 저장되지 않는다. Shared Cache 브라우저와 서버 사이에서 동작하는 캐시 Proxy Cache (포워드) 프록시에서 동작하는 캐시 Managed Cache CDN서비스, 리버스 프록시에서 동작하는 캐시 서비스 관리자가 직접 캐시에 대한 설정을 관리하거나 리버스 프록시 설정으로 관리할 수 있다...
REST REST: Representational State Transfer 자원을 이름으로 구분하여 해당 자원의 정보(state)를 주고 받는 행위를 의미한다 HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD 동작을 적용하는 것 REST의 구성 자원(Resource) - URI 모든 자원에 고유한 ID가 존재하며, 이 자원은 Server 상에 존재한다. URI를 통해 자원을 구별한다. 행위(Verb) - Method HTTP 프로토콜의 Method를 통해 자원에 대한 조작을 수행한다. ie. GET, POST, PUT and so on 표현(Representation) REST에서 자원은 JSON, XML, TEXT, RSS등의 다양한 형태로 표현될 수 있..
HTTP 동작과정과 HTTP method, 상태코드 HTTP는 HTML 문서와 같은 자원을 가져오기 위해 사용되는 통신규약이다. 웹 브라우저(클라이언트)와 서버 사이의 HTTP 통신을 통해 사용자는 웹 문서에 접근/이용할 수 있다. 서버 간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다. 클라이언트와 서버는 개별적인 메세지(데이터 스트림)를 주고받으며 통신한다. 웹 브라우저(클라이언트)가 보내는 메세지를 요청(request)라고 하며, 이에 반응하여 서버가 전송하는 메세지를 응답(response)라고 한다. HTTP는 확장가능한 프로토콜이다. 이 확장가능성(extensibility)을 통해서 응용 계층 프로토콜(TCP 또는 TLS-encryped TCP연결)과 같은 다른 전송 프로토콜 또한 이용이..
TCP와 UDP 네트워크의 전송계층에서 사용하는 프로토콜 데이터 전달을 위하여 사용하는 프로토콜 전송 계층(Transport Layer) OSI 7 계층 중 Layer 4 계층에 해당 송신자와 수신자를 연결하는 통신 서비스 제공 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공 TCP 전송 제어 프로토콜 (Transmission Control Protocol)의 약자 특징 연결 지향 프로토콜 가상회선 패킷 교환 방식을 사용 데이터의 전송 순서를 보장 (데이터의 순서 유지를 위해 각 바이트마다 번호를 부여) 신뢰성있는 데이터 전송(ACK 이용) => 데이터를 확실히 주고받을 때 사용 서버와 클라이언트는 1:1 연결된다 => 논리적 경로를 지정한 후 고정 경로로 통신 Streaming 서비스에 불리..