일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 의존성
- AWS
- 백준
- 우테코
- Level2
- HTTP
- Docker
- 서블릿
- 프로그래머스
- CircuitBreaker
- 자바
- 스프링 부트
- JPA
- 우아한세미나
- REDIS
- Paging
- JUnit5
- MSA
- Spring Batch
- mock
- yml
- 세션
- 코드리뷰
- 미션
- 스프링부트
- 트랜잭션
- 레벨2
- 프리코스
- 우아한테크코스
- AOP
- Today
- Total
목록우아한테크코스 4기/프로젝트 (16)
늘

HTTP의 특징 connectionless, stateless connectionless는 클라이언트에서 http request를 서버에 보내면, 서버는 알맞은 http response를 보내고 접속을 끊는 특성이 있다. 왜냐하면 여러 클라이언트와 통신을 하려면 한 커넥션이 오래 물고 있으면 성능에 좋지 않기 때문이다. 하지만 매번 연결을 끊고 다시 생성하는 비용도 만만치 않아서 (HTTP1.1에서) keep-alive를 통해서 timeout, max번 connection을 재활용하기도 한다. stateless는 통신이 끝나면 상태를 유지하지 않는 특징이다. 로그인을 성공하고 다음에 글을 적으려고 하면 다시 인증을 해야 한다. 쿠키 HTTP는 connectionless, stateless한 성격을 가진다..

SonarQube 란 정적 코드 분석을 자동을 수행하는 오픈 소스 플랫폼 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점에 대해서 검사하고 결과를 보고서로 작성한다. 20개 이상의 언어에 대한 분석이 가능하다. 정적 코드 분석 이란 프로그램을 실행하지 않고 소스 코드나 컴파일된 코드를 분석하는 작업 프로그램을 실행하지 않고 버그나 취약점을 분석할 수 있다. 주로 개발 단계에서 코드의 구조적인 문제나 실수를 찾아내기 위해서 사용한다. 코드 작성단계에서 차후 코드를 실행했을 때 발생할 가능성이 높은 문제를 미리 찾고 대처할 수 있다. 단순이 버그나 오류를 찾아내는 것 뿐만 아니라 더 좋은 코드를 위한 개선점을 제시한다. 반대로 동적 분석에는 모니터링이나 테스..

프로덕션 코드에서 게시글 조회 로직이 있었습니다. 게시글을 조회할 때, 조회수 증가(update)가 있었지만 단순히 조회하는 로직이라고 생각했고 @Transactional(readOnly=true)옵션을 설정해주었습니다. 그리고 서비스 통합 테스트에서는 @Transactional을 통한 롤백을 사용했었습니다. 그래서 테스트에서는 정상적으로 조회수가 증가해서 이상이 없었지만 실제 QA할 때, 조회수가 증가하지 않는 버그를 발견했습니다. 이러한 문제를 어떻게 해결할까 고민을 했었고, 서비스 통합테스트에서 @Transactional을 제거해서 이와 같은 실수가 재발하는 것을 방지했습니다. 문제 상황 해당 메서드를 보고 단순히 조회니깐 readOnly=true를 붙이면 되겠다고 생각했다. 그리고 Service ..

프로젝트 진행하면서 HTTPS 적용기 HTTP 인터넷 상에서 정보를 주고 받기위한 프로토콜(양식과 규칙의 체계) 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜 암호화되지 않은 평문으로 데이터를 전송한다. (악의적인 감청, 데이터 변조의 가능성) HTTPS HTTP + secure 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다. HTTPS는 HTTP의 하부에 SSL과 같은 보안계층을 제공함으로써 동작한다. 도메인 가비아에서 도메인을 구입하면 TTL을 설정할 수 있다. TTL에 대해서 학교에서 배웠는데 기억이 안나서 다시 찾아보았다.. TimeToLive의 약자로 Routing Loop를 방지하여 무한 루프에 빠지는 것을 막을 수 있다. 또한 멀티 캐스팅할 때, 라우터 범위..

무한 스크롤 구현을 요구받아서 처리하려고 찾아본 결과 커서 기반 페이지네이션이라는 키워드가 있어서 찾아 공부해봤다. 1. 페이지네이션(Pagination) 이란? 전체 데이터에서 지정된 개수만 데이터를 전달하는 방법 필요한 데이터만 주고받으므로 네트워크의 오버헤드를 줄일 수 있다. 구현 방법에는 크게 두 가지가 있다. 오프셋 기반 페이지네이션 (Offset-based Pagination) 커서 기반 페이지네이션 (Cursor-based Pagination) 오프셋 기반 페이지네이션 - 페이징 offset만큼 읽는데 이전의 읽었던 것을 다시 쭉 읽은 후 조회해서 데이터가 많아지면 성능상 안 좋다. 데이터 중복 문제: 2페이지 끝까지 읽었는데 앞에 최신 데이터가 들어오면 3페이지 읽을 때 중복이 발생할 수 ..

가장 큰 차이로는, JPA에 의해 처리되느냐, DDL에 의해 cascade가 걸린 테이블이 생겨 DB단에서 처리되느냐 이다. 전자의 방식을 취할 경우, JPA에 의해 외래 키를 찾아가며 참조하는 레코드를 제거해주게 됩니다. 따라서, JPA 상에서는 참조하고 있는 레코드의 개수만큼 delete 쿼리가 생성됩니다. 후자의 방식을 취할 경우, 데이터베이스 자체에서 on delete cascade 제약조건이 걸리게 됩니다. 이를 통해 참조하는 레코드가 모두 제거되는 것입니다. cascade = CASCADE.REMOVE JPA 레벨에서 작동한다. 외래 키를 찾아 참조하는 레코드를 제거해준다. 참조하고 있는 레코드 수 만큼 delete쿼리가 나간다. 부모 테이블의 자식 컬럼에 걸어여하므로(일반적으로 @OneToM..