전체 글 192

헥사고날 아키텍처

1️⃣ 계층형 아키텍처의 한계Controller -> Service -> Repository -> DB이 구조를 계층형(Layered) 아키텍처 라고 한다. 이 구조의 단점은 다음과 같다. 변경 전파 : DB나 외부 API가 바뀌면 Service 코드까지 수정해야 한다.결합도 증가 : 비즈니스 로직이 JPA, Mybatis 같은 기술 세부사항에 묶인다.테스트 어려움 : DB 연결 없이 Service 로직을 테스트하기 어렵다.이 구조의 의존성 방향은 "바깥 👉 안쪽" 이다. 즉, Controller가 Service를 사용하고 Service가 Repository를 사용한다.👉 👉 도메인 로직이 외부 기술에 의존하는 구조 2️⃣ 헥사고날 아키텍처 DB나 API, 웹 UI 같은 기술이 도메인 로직을 몰라..

Architecture 2025.10.29

[백준/파이썬] 3967 매직 스타

https://www.acmicpc.net/problem/3967 📝 문제 요약알고리즘: 백트래킹 + 가지치기 (Constraint Satisfaction) 12개의 칸으로 구성된 별(매직 스타)에 A~L(=1~12)의 알파벳을 배치해6개의 줄의 합이 모두 26이 되도록 만드는 문제다.이 문제는 단순 순열이 아닌, 제약 조건을 점진적으로 확인하며 탐색을 줄이는 대표적인 퍼즐 문제다. 🧱 입력 처리 & 자료 구조 설계 coords = [ (0, 4), (1, 3), (1, 5), (2, 2), (2, 4), (2, 6), (3, 1), (3, 3), (3, 5), (3, 7), (4, 4)] 문제의 별 모양의 숫자가 들어가야하는 12칸의 좌표이다.lines = [ [..

Algorithm/Problems 2025.10.17

[Spring] 트랜잭션 정리

👀 서비스 로직을 개발할 때 여러 작업을 하나로 묶어서 모두 성공하거나 모두 실패하게 처리해야 할 때가 있다.ex) 회원가입과 동시에 포인트를 적립하는 상황에서 회원만 등록되고 포인트 적립이 실패하면 안됨 👉 이러한 문제를 해결하기 위해 트랜잭션을 사용한다.1️⃣ 스프링 트랜잭션의 핵심: AOP 프록시 + @Transactional 스프링에서 @Transactional 을 메소드에 붙이면, 해당 메소드는 프록시(proxy) 객체를 통해 호출된다. 이 프록시는 메소드 실행 전후에 트랜잭션의 시작, 커밋, 롤백을 자동으로 처리해준다. 🤷‍♀️ 프록시란?진짜 객체 대신 앞에서 대리로 행동하는 가짜 객체ex) 직접 은행에 가서 돈을 인출하는 대신 나 대신 일을 처리해주는 직원(프록시)에게 부탁할 수 있음 ..

Language/Java 2025.10.16

[백준/파이썬] 16562 친구비

https://www.acmicpc.net/problem/16562 📝 문제 요약학생 N명과 친구 관계 M개, 각 학생마다 친구비가 있음친구의 친구도 친구이므로, 한 그룹에 속한 사람은 한 번만 친구비를 내면 됨예산 K원 안에서 모든 학생과 친구가 될 수 있는지 판단하고, 가능하면 최소 비용 출력, 불가능하면 Oh no 출력import syssys.setrecursionlimit(10**7)input = sys.stdin.readlinen,m,k = map(int, input().split())A = [0] + list(map(int, input().split())) # 1번 인덱스를 맞추기 위함friends = [[] for _ in range(n+1)]for _ in range(m): v,w ..

Algorithm/Problems 2025.10.13

[백준/파이썬] 1863 스카이라인 쉬운거

https://www.acmicpc.net/problem/1863 # 1863 스카이라인 쉬운거import sysinput = sys.stdin.readlinen = int(input())buildings = [list(map(int, input().split())) for _ in range(n)]buildings.sort() # x좌표 정렬# 스택에 남는 건물이 없도록 마지막에 높이가 0 인 건물 추가buildings.append([float('inf'), 0])ans = 0stack = [0] # 건물 높이를 저장하고 높이가 낮아질 때 pop 하여 건물 수를 셈for x,y in buildings: while stack and y stack[-1]: # 새로운 건물이 시작되는 시점 ..

Algorithm/Problems 2025.10.03

99클럽 코테 스터디 19일차 TIL + DP

https://www.acmicpc.net/problem/28069import sysinput = sys.stdin.readlinen, k = map(int, input().split())inf = 1e7dp = [inf] * (n+1)dp[0] = 0for i in range(n): if i i+1번째 계단에 올 수 있는 횟수는 두가지 방법으로 구할 수 있다.이전 칸에서 한칸 오르기 > 기존횟수 + 1i+i//2 칸 오르기 > 기존횟수 + 1즉 기존 자신의 횟수와 이전 칸 (i) 에서 올라오는 횟수를 비교해 최솟값을 가지고 있으면 된다.n개의 계단을 돌면서 횟수를 구해주고 k횟수 보다 적다면 k횟수 안에 계단에 도달한 것이기 때문에 minigimbob 출력k횟수 보다 많다면 k횟수 안에 도달하지..

Algorithm/Problems 2025.04.24