세팅글을 쓴다는게 너무 오랫동안 방치되다보니 과거 코드보단 그래도 나름 최신 코드가 예제로 쓰기 좋은거 같아 코틀린 최신 코드로 되어있다는 점 양해부탁드립니다.여기서 잠깐이 글을 읽기 전 사전 지식이 필요합니다.전자 서명: 전자 서명은 디지털 형식으로 문서나 데이터의 서명 및 인증을 수행하는 방법입니다. 전자 서명은 종이 서명의 디지털 대응물로, 문서의 진위성, 무결성, 서명자의 신원을 확인하는 데 사용됩니다.주요 특징은 다음과 같습니다.1. 인증: 서명자가 누구인지 확인할 수 있습니다.2. 무결성: 서명된 문서가 변경되지 않았음을 보장합니다.디지털 서명의 동작 원리디지털 서명은 공공 키 기반 구조(PKI, Public Key Infrastructure)를 사용합니다.키 쌍 생성: 서명자는 공개 키와 비..
흔히 요즘 DAU가 많은 서비스들을 흔하게 볼 수 있습니다. 카카오의 실시간 댓글 서비스는 DAU가 60만에 도달하기도 합니다. 그럼 DAU가 뭘까요? Daily Active User의 앞 글자만 따온 용어로 하루 활성화된 유저 수를 뜻합니다. 이러한 서비스는 TPS가 절대적으로 중요할 수 밖에 없는데 예를 들어 60만의 사용자중 1/60 인 1만명이 댓글 새로고침을 눌렀을 때 만약 분산 서버환경 sacle 서버 5대가 있어도 하나의 WAS당 2000개의 요청을 받아야합니다. 만약 여기서 병목이 생긴다면 굉장히 치명적일 것입니다. 문제 상황 다음 문제는 이렇습니다. 게시판 서비스이고 현재 상태 단일 서버 Tomcat 기본 thread pool size인 200개로 open했습니다. 그리고 현재 MySQL..
코드를 살펴보면서 좋아요 기능에 멀티 스레드로인한 동시성이나 성능을 개선할 수 있는 방법이 떠올라 개선해보았습니다. 제가 계속해서 개선해나간 기록들을 남겨두며 누군가에게 도움이 됐음 좋겠습니다. 문제 상황 @Transactional public Long likeBoard(final Long boardId, final Long memberId) { Board board = boardReadService.getBoardOne(boardId); board.getBoardCount().plusLike(); return likeRepository.save(Like.createLike(memberId, boardId)).getId(); } 여러 스레드가 Board 객체를 조회하고 plusLike를 한 후 마지막으로..
자세한 내용은 Github를 참고해주시기 바랍니다. 오늘은 레포지토리에 대해 얘기를 해보겠다. 레포지토리는 일단 설계부터 추상화를 이용해 구체화에 의존하지 않는 것이 핵심이라고 생각한다. 구체화에 의존하는게 왜? 객체지향을 공부했더라면 알 것이다. 구체화에 의존하는 것은 유지보수성을 떨어트린다. 우리가 알아야하는건 저장소이지 구체적으로 어떤 저장소인진 알아야할 이유가 전혀 없다. 오히려 그렇게 된다면 저장소가 바뀔 때마다 우리는 그에 맞춰 서비스도 바꿔주어야한다. 예를들어 우리는 QueryDSL을 이용하다가 갑자기 JOOQ로 넘어가야하는 상황을 가정해보자 그럴려면 우리는 JOOQ에 관련된 레포지토리를 만들고 그걸 서비스에 주입시켜줘야한다. 거기서 만약에 MyBatis까지 넣어준다면 MyBatis에 관련된..
자세한 내용은 Github를 참고해주시기 바랍니다. 자 이제 엔티티를 개발할 차례다. 사전에 먼저 용어 부터 정리하도록 하자. 도메인 모델패턴 DDD에서 정의한 도메인 모델을 먼저 간략하게 보면 다음과 같습니다. 전 글인 서비스 로직 구현에서 도메인 계층에 도메인 정보와 비즈니스 규칙을 정의한다고 했는데 그렇다 이렇게 정의 된 모델을 도메인 모델이라고 한다. 그리고 이러한 개발 패턴을 도메인 모델 패턴이라고 하는데 이러한 패턴은 객체 지향 언어를 이용해 개념 모델에 가깝게 구현할 수 있고 도메인 개념을 모델을 통해 한눈에 이해할 수 있게 할 수 있다는 장점이 있다. JPA 값 타입 JPA에서는 내장 타입을 이용해 식별관계 테이블을 정의할 수 있습니다. 이것을 이용해서 읽기 전용인 VO객체를 만들어 도메인..
이제 서비스를 구현해볼 차례다. 먼저 서비스는 애플리케이션 레이어에 해당하는데 보통 비즈니스를 구현하는 구현부라고 생각하면 된다. 물론 이미 여러분들은 틀이 완성 되어있을 것이다. 컨트롤러를 먼저 만들었기 때문에 없는 클래스들은 alt + enter(mac. option + enter)를 이용하면 쉽게 틀을 만들 수 있다. 또한 ReadService와 Service가 따로 구현이 되어있는데 Transactional을 공통으로 사용할 수 있어 간결하게 코딩이 가능하며 나중에 Read와 Write 도메인이 분리되더라도 영향도를 줄일 수 있고 분리된 서비스를 기반으로 빠르게 리팩토링이 가능할 수 있습니다. @Service @Slf4j @RequiredArgsConstructor @Transactional pu..
Global Setting관련해서는 GitHub를 확인해주세요. (JWT와 Security는 매우매우 중요해서 추후 블로그 올립니다.) 우린 컨트롤러부터 서비스 엔티티 순으로 내려가며 개발할 예정입니다. 그렇다면 여기서 의문이 생길겁니다. 왜 컨트롤러부터 개발하나요 ? 먼저 제 생각을 말씀드리면 개발 속도와 깔끔한 아키텍처를 위해서 입니다. 저희는 개발하면서 Entity를 먼저 개발해왔지만 그런식의 개발은 Entity에 의존적인 개발을 할 수 없게 만들고 Entity에 의존적인 개발을 한다는 것은 결국 데이터 중심의 애플리케이션 개발이기 때문에 객체 중심의 개발이 이루어지는 요즘과는 맞지 않습니다. 그렇기 때문에 이벤트 기반으로 먼저 개발을 진행한 후 이벤트에 필요한 속성들을 모아 Entity를 개발하는..
블로그 프로젝트 시작이유 현대 백엔드 기술 중 가장 많이 쓰이는 기술들을 골라보라고 하면 대표적으로 Redis, Spring Boot, JPA 그리고 MySQL 등이 있습니다. 블로그 프로젝트는 이 기술들을 적절하게 사용하는 법을 제시할 예정입니다. 또한 FE와 협업하기위한 최적의 솔루션을 제시할 예정입니다. (본인피셜이니 거를 사람들은 걸러도 됩니다.) 혹시나 본인이 간단한 게시판 프로젝트를 통해서 실력을 높이고자 한다면 제 블로그를 보며 하는 것도 추천 드립니다. 그러면 우선 설계 부터 해봅시다. 블로그에서 일어날 수 있는 이벤트 들을 정리해보면 다음과 같습니다. 게시판 스터디 회원님 분들과 같이 작성한 이벤트 들입니다. 도메인 별로 이벤트를 나눴습니다. 그렇다면 이제 여기서 백엔드 영역의 기능들로 ..
- Total
- Today
- Yesterday
- 프로그래밍
- thread
- 취준
- 취업준비
- 백엔드
- 프로젝트
- 면접
- Spring
- DevOps
- 면접준비
- 코드
- 게시판
- IT
- Kotlin
- 인터뷰
- 개발
- CS
- 개발자
- Redis
- JPA
- 동시성
- docker
- 코딩
- swarm
- DB
- 취업
- java
- MySQL
- 자바
- 면접 준비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |