개요 회원 가입 같은 기능들은 유저가 값을 제대로 입력 했는지 검사를 해야한다. 보통 이런 경우는 프론트엔드에서 입력 값에 대한 검증을 하고 서버로 보내지만, 그렇다고 프론트엔드에서’만’ 유효성 검사를 해도 문제가 생길 수 있다. 따라서 백엔드 측에서도 검증 코드를 작성해야만 한다. 스프링부트는 필드에 어노테이션을 붙이는 것만으로 검증 로직을 만...
[백엔드|스프링부트] 알림 기능은 어떻게 구현하는게 좋을까?
개요 댓글이나 좋아요 알림은 유저의 요청 없이도 실시간으로 서버의 변경 사항을 웹 브라우저에 갱신해줘야 하는 서비스이다. 하지만 전통적인 Client-Server 모델의 HTTP 통신에서는 이런 기능을 구현하기가 어렵다. 클라이언트의 요청이 있어야만 서버가 응답을 할 수 있기 때문이다. HTTP 기반으로 해당 문제를 해결하려면 다음과 같은 방식들...
[백엔드] 캐시 서버로 사용되는 Redis를 알아보자
현재 진행하는 프로젝트에서 대규모 트래픽 처리를 어떻게 할지 고민해보았다. 코드 최적화, 규모 확장, 로드밸런서 도입 등의 방법들이 있지만, 이번에는 캐시 서버 도입에 대해, 그 중에서도 Redis에 대해 알아보려고 한다. 캐시 서버는 무엇이며 왜 대규모 트래픽 처리에 사용되는지, 또 Redis는 어떤 특징을 가지고 있는지를 하나씩 기록해 보자. ...
[백엔드|스프링부트] 연관 관계 매핑과 영속성 전이
연관관계 매핑 연관관계 매핑이란? @Entity public class Post { // 게시글과 댓글의 경우 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long postId; @Column(nullab...
[SNS 클론코딩] 회원가입과 로그인 기능 개발
| — | — | 진행 상황 위의 시퀀스 다이어그램을 따라 회원가입, 로그인 관련 테스트 코드 작성. 회원가입과 로그인 기능에 필요한 엔티티, DTO, 컨트롤러, 서비스, 리포지토리 작성. 예외를 일괄적으로 처리하기 위해 @RestControllerAdvice를 사용해 GlobalControllerAdvice 정의 배운 점 ...
[SNS 클론코딩] 기획 및 아키텍처 설계
요구사항 유즈 케이스 다이어그램 회원가입과 회원 로그인을 할 수 있어야 한다. 피드를 통해 포스트 목록을 조회할 수 있어야 한다. 로그인이 되어있다면, 포스트를 작성하고, 수정하고, 삭제할 수 있어야 한다. 로그인이 되어있다면, 다른 회원의 포스트에 좋아요를 누르면 좋아요 수가 올라가고, 다시 누르면 취소된다. 아키텍처 설계 ...
[백엔드|스프링부트] JPQL과 JPA Repository 쿼리 메서드
JPQL JPQL이란? JPA에서 사용할 수 있는 쿼리를 말한다. String으로 쿼리문을 작성, EntityManager을 통해 쿼리 실행한다. String jpql = "select product " + "from Product prod...
[백엔드|스프링부트] 동영상 스트리밍 서비스 API 클론코딩 1주차
API 설계 가이드 링크 기능 메인을 로드하면, 메인에 띄울 영상 ID의 리스트를 불러오고, 리스트의 ID들을 각각 조회해 썸네일, 영상 이름 등의 정보를 불러온다. 메인을 로드할 때마다 각각 다른 영상들이 뜬다. 유튜브라면 추천 알고리즘을 사용하겠지만, 현재로선 불가능하므로 랜덤으로 조합한다. 구독 페...
[백준] 11400번: 단절선
문제 [원문 링크] 그래프가 주어졌을 때, 단절선을 모두 구해 출력하는 프로그램을 작성하시오. 단절선이란 그 간선을 제거했을 때, 그래프가 두 개 또는 그 이상으로 나누어지는 간선을 말한다. 즉, 제거했을 때 그래프의 connected component의 개수가 증가하는 간선을 말한다. 입력 첫째 줄에 두 정수 V(1≤V≤100,000),...
[알고리즘|파이썬] 코드트리: 산타의 선물 공장
문제 [원문 링크] 해설 공장의 벨트 갯수, 선물 갯수, 그리고 선물의 ID와 무게를 주고, 각각의 연산을 처리하는 문제였다. 선물 상자를 가운데서 빼오거나, 모든 선물 상자를 다른 벨트로 옮기는 등의 연산이 있었기 때문에, 배열이 아닌 연결 리스트 자료구조를 사용했다. 또 각각의 벨트의 상태가 다르고, 놓여있는 상자들도 다르기 때문에 벨...