
✅ 더티 체킹(Dirty Checking) 트랜잭션 안에서 Enitity 변경이 일어났을 때 변경한 내용을 DB에 반영하는 것 더티 체킹 모를 때에는 Update 기능을 구현하기 위해서 아래와 같이 변경 부분만 다시 save 하는 코드를 작성했었다... @Transactional public Long boardUpdate(BoardUpdateDto dto) { Board origin = boardRepository.findById(dto.getId()) Board update = InquiryAnswer.builder() .id(origin.getId()) .content(dto.getContent()) .build(); return boardRepository.save(update).getId(); }..

백엔드 개발을 다 끝내고, 배포된 ec2에서 각 도메인의 부하 테스트를 JMeter를 통해 진행하였다. 가장 잘 나온 테스트 기록의 경우, 다음과 같다. 스터디 게시물 전체 조회를 테스트해 봤는데, 조건은 유저 1000명이 이 작업을 100번 반복하게 하였다. 왼쪽 수치는 TPS(Transaction per second)로 보통 worst case를 동접 가능로 잡기 때문에 동시접속 약 500명을 커버한다고 볼 수 있다. 다른 결과들은 다음과 같다. 테스트 : 게시물 수정, 저장, 검색, 전체 조회 조건 : 유저 500명이 해당 작업을 10번 수행 테스트 : 게시물 댓글 리스트 조회, 댓글 생성, 댓글 수정 조건 : 유저 500명이 해당 작업을 10번 수행 테스트 : 채용 공고 전체 조회, 검색, 상세 ..
REST API 가이드? 목차 REST API URI 가이드 HTTP 응답 상태 코드 ✅ REST API URI 가이드 1. 복수형 명사와 소문자를 사용한다. Bad http://ssafe.com/user Good http://ssafe.com/users 2. 소문자를 사용한다. 주소에서 대소문자를 구분하므로, 카멜방식이 아닌 소문자를 사용하여 작성한다. Bad http://ssafe.com/users/postComment Good http://ssafe.com/users/post-comments 3. 언더바를 대신 하이픈을 사용한다. 가급적 하이픈의 사용도 최소화하며, 정확한 의미나 표현을 위해 단어의 결합이 불가피한 경우에 사용한다. Bad http://ssafe.com/users/post_comme..

JPA N+1? Jpa + Spring Boot를 통해 개발을 하다 보면 N+1문제를 마주칠 겁니다. 많이 다루는 Join Fetch, @EntityGraph를 통하여 해결하는데 어떻게 사용하고 단점은 무엇인지 정리해보겠습니다. ❗ 단방향 매핑 형태로 @ManyToOne인 한정된 예제로 진행하기 때문에 그외에 일어나는 해결방법은 다루지 않겠습니다. N+1문제는 이런 식으로 해결하는구나~ 정도만 이해할 수 있는 글입니다. N+1문제를 정리하기전에 테이블 구조를 통해 설명할게요 아래와 같이 member, board, category 테이블이 있습니다. JAVA Code로 구현 해보겠습니다. Memeber @Entity @Getter @NoArgsConstructor(access = AccessLevel.PR..

👍 TEST Class 생성 시 TIP Test class 생성 방법 : 내가 만든 클래스에서 우클릭 → Go To → Test → Create Test → Ok → Test폴더에 생성됨 👉 Intellij Live Template 단축키 생성 방법 Intellij 좌측상단 File → Live Templates 입력 → Java 에서 + 버튼 클릭 Template test에 코드 삽입 @Test public void $END$() throws Exception { //given //when //then } build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementatio..
영속성(Persistence) 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재 -> 프로그램 종료 시 모두 사라짐 객체에 영속성을 부여한다면 프로그램이 종료되더라도 다시 같은 상태를 가지는 객체로 만듦 Persistence Layer 프로그램의 아키텍처에서 데이터에 영속성을 부여해주는 계층 Persistence Framework JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 개발 SQL mapper와 ORM으로 나누어진다. SQL Mapper SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다. 개발자가 작성한 SQL문으로 해당되는 ROW를 읽고 결과 값을 쿼리 수..

1. Nginx는 뭘까? 엔진엑스 사용하는 곳 Naver, kakao, github, netflix 대형 급 아이티 회사에서 씀 --> 안쓰는 회사를 찾기가 어려움 Web Server : HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서비스 프로그램을 말한다. (정적인 자원을 처리해주는 것!) EX) Happy House Build 된 파일 , Vue.js index.html 이것이 정적 파일 WAS : 클라이언트 요청에 대해 동적인 처리가 이뤄진 후 응답. EX) Happy House Backend Login-API 클라이언트에서 로그인 요청 웹 서버가 로그인 정보를 가지고 실제 로그인을 처리 WAS에서 로그인 처리 로직을 가지고 있음 이러한 과정을 진..

✅ 브렌치 전략을 왜 써야 할까? 만약 브렌치 전략이 없다면 ❔ 우리는 어느 브렌치가 최신인지 모른다. 프젝 잘 만들어놓고 배포까지 하고 싶은데 어떤 브렌치를 기준으로 merge 해서 배포할지 문제가 있다. Branch Strategy 종류 1. git flow : 5가지의 브렌치를 이용해 운영하는 브렌치 전략 https://techblog.woowahan.com/2553/ Git Resolve Conflict 이용하면 편함 git rebase --continue 등등 명령어 사용. 충돌 났을 때 모르겠으면 물어보기. git push -f origin [자신이 만든 브랜치] PR에서 Merge 버튼 누르기 or 직접 merge 하기 본인이 올린 PR은 본인이 충돌 해결하고 merge 하기! 👍 이걸 잘 ..
질문은 ✅ 대답은 ❗ 키워드는 빨간색 목차 절자지향 과 객체지향 Java 특징 Java는 왜 운영체제에 독립적인가? 객체지향 언어의 특징 Overriding ,Overoading JVM 동작과정 구조 설명 GC 동작과정 ✅ 1. 절차지향과 객체지향 절차지향은 순차적인 처리를 중시한다 장점 : 컴퓨터 처리 구조와 유사해서 실행속도가 빠르다 단점 : 유지보수 어려움 ,실행순서가 정해져있어 동일한 결과를 보장하는 것이 어렵다 객체지향은 데이터와 절차를 하나의 덩어리로 묶어서 각각을 모델링하여 개발하는 방법 장점 : 유지보수 용이 ,코드 재사용용이 디버깅 쉬움 단점 : 절차지향에 비해 속도가 느리다. ✅ 2. Java 특징은 뭐에요? 운영체제에 독립적 Java는 JVM 에서 동작하기 때문에 운영체제에 독립적이다..
✔ JSP (Java Server Pages) HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 전달해주는 언어이다. Java EE 스펙 중 일부이면서 WAS(Web Application Server)에서 동작한다. JSP는 실행 시에는 자바 Servlet으로 변환된 후 실행됨 서블릿과 유사는 하지만 서블리과는 달리 HTML 표주엔 따라 작성됨 따라서 웹 디자인하기 용이하다 => 비슷한 거로는 PHP, ASP, ASP.NET 등이 있음 동작 과정 JSP 요청 -> Servlet Java file 변환 -> Servlet class compile -> Servlet class 를 메모리에 적재. ✔ Servlet 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 ..