전체 글(37)
-
카톡 테마 서비스 - 고아 이미지 정리 시스템 구현
1. 문제 정의파일 업로드 기능 중 DB 와 파일 스토리지간의 일관성 유지 문제가 있었다.DB 반영 성공 후 파일 저장 실패파일 저장됐는데 DB 반영 실패업데이트 시 기존 이미지 삭제 실패하지만 파일 시스템은 트랜잭션으로 묶을 수 없기 때문에 해결방안을 모색해야 한다. 2. 접근처음에는 DB 저장 -> 파일 저장 순서를 고려하였으나, 파일 저장 실패 시 DB가 먼저 반영되었으나 DB가 존재하지 않는 이미지를 참조하게 되어 일관성이 깨질 수 있다는 문제가 있었다. 그래서 파일 저장 -> DB 저장 순서로 처리하고, 실패는 나중에 처리하는 방식을 생각했다. 그러면 DB가 가리키는 파일이 없는 상황을 피할 수 있고, DB 커밋 실패 시 파일을 롤백하면 되기 때문이다. 3. Create1. 이미지 저장 (실패 ..
2026.04.08 -
개념 정리
@Facade Pattern프로그램 내부 구조는 복잡하지만 사용자나 클라이언트가 단순하게 사용하도록 외부에 단일 인터페이스로 감싸주는 패턴 @valid검증 로직을 DTO에서 실행하고, 확장성, 유지보수, 표준성 측면에서 컨트롤러에서 직접 null 체크하는 것 보다 우위에 있다. Mapper도메인 객체와 DTO 변환을 담당하는 계층 @MapperMapstruct에서 제공하는 어노테이션구현체 자동 생성 @ondeleteJPA / Hibernate에서 연관된 엔티티가 삭제될 때 DB 레벨에서 어떻게 처리할 지 지정하는 기능@ManyToOne, @OneToOne 관계에서 사용 @JsonPropertyJSON 필드명과 자바 필드명을 연결해주는 Jackson 어노테이션JSON과 Java에서 서로 다른 이름을 쓰고 ..
2025.11.26 -
1182 - 부분수열의 합
[알고리즘 분류]브루트포스 알고리즘백트래킹[조건]첫째줄:N: 정수의 개수(1S: 정수 (|S| 둘째줄:N개의 정수 ( [문제 이해]N개의 정수로 이루어진 수열. 크기가 양수인 부분수열 중, 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하기5 0-7 -3 -2 5 8가 입력이라면첫번째 원소 선택 : 합계 -7 / 선택 X : 합계 0두번째 원소 선택 : 합계 -10 / 선택 X : 합계 -7두번째 원소 선택 : 합계 -3 / 선택 X : 0...이런식으로 트리를 만들면 될 것 같다.그리고 결과가 합계와 같으면, 경우의 수를 늘려준다. [문제 설계]이진트리를 만들면 될 것 같다. 그리고 2**n개만큼 최종 결과가 나올테니, 그 값들중에서 s와 같은 값의 개수를 찾으면 되겠다.그런데 크기가 양수인..
2025.11.04 -
화일처리 - BST 삽입/삭제 알고리즘 구현
필수 구현 사항 BST의 각 노드를 표현하는 클래스 또는 구조체 구현클래스 또는 구조체 명은 "Node"로 한다.노드는 다음 멤버 변수를 가진다.key: 해당 노드의 키 값left: 해당 노드의 왼쪽 자식 노드의 주소right: 해당 노드의 오른쪽 자식 노드의 주소height, size를 제외한 다른 멤버 변수는 추가, 삭제 및 변경이 금지된다.BST의 삽입 알고리즘을 구현하시오단, 수업 슬라이드에서 설명한 아래의 함수를 이용하여 구현해야 한다.getNodeBST()함수는 아래의 프로토타입(템플릿)을 따라야 한다.insertBST(T, key)BST의 삭제 알고리즘을 구현하시오.단, 수업 슬라이드에서 설명한 아래의 함수를 이용하여 구현해야 한다.height(T)size(T)minNode(T), maxN..
2025.10.31 -
1072 - 게임
[알고리즘 분류]수학이분 탐색[조건]X, Y : 정수X: 게임 횟수Y: 이긴 게임 (Z%)Z: 승률. 소수점 버리기 [문제 설계]X = 53, Y = 47 이라면 47 / 53 = 0.8867924528. -> 88앞으로 모든 게임을 이긴다고 가정할때 게임을 얼마나 더 해야 Z가 변하는지? [문제 이해]1퍼센트가 올라야된다. [알고리즘 설계]z+1 = x+a / y+a 가 되는 a값을 구한다.z를 int 형으로 바꿔주고, double [구현]import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double x = sc...
2025.10.13 -
1063 - 킹
[알고리즘 분류]구현시뮬레이션[조건]첫째 줄 : 킹의 위치, 돌의 위치, 움직이는 횟수 N . N은 50보다 작거나 같은 자연수둘째 줄 부터 N 개의 줄 : 킹이 어떻게 움직여야 하는지.R : 한 칸 오른쪽으로L : 한 칸 왼쪽으로B : 한 칸 아래로T : 한 칸 위로RT : 오른쪽 위 대각선으로LT : 왼쪽 위 대각선으로RB : 오른쪽 아래 대각선으로LB : 왼쪽 아래 대각선으로[문제 설계]8*8 크기의 체스판에 킹이 있다. 알파벳은 열, 숫자는 행을 의미한다.체스판에는 돌이 하나 놓여있는데, 킹이 돌과 같은 곳으로 이동할 때는 돌을 킹이 움직인 방향과 같은 방향으로 한칸 이동시킨다.입력으로 킹이나 돌이 체스판 밖으로 나갈 경우엔 그 이동은 건너 뛰고, 다음 이동을 한다.킹과 돌의 마지막 위치를 구해야..
2025.10.10