분류 전체보기 19

[Infra] "제 컴퓨터에서는 되는데요?" 금지 - Docker 란?

개발을 하다보면 한 번쯤 이런 상황을 겪게 된다. 내 로컬에서는 분명 잘 돌아가던 코드가 팀원의 컴퓨터나 서버에 올리는 순간 갑자기 오류가 난다거나.. 아마 이유는 단순하고 다양할 것이다. Java 버전이 다르거나, 환경변수가 빠져있다거나, OS가 다르거나. 이러한 문제를 해결하기 위해 등장한 것이 Docekr이다.🤔 Docker 란?Docker는 애플리케이션을 컨테이너화하여 가볍고 이식성 있는 패키지로 실행할 수 있게 해주는 소프트웨어 플랫폼이다.주요한 특징으로는 아래와 같다.컨테이너화경량이식성확장성❓ 언제 사용할까?일관된 개발 환경이 필요할 때위에서도 설명했듯이 개발이나 테스트, 운영 환경이 다를 때 발생하는 문제를 피하고자 할 때 사용하면 좋다.빠르게 배포하고 싶을 때개발 환경과 동일한 모든 구성..

[코드트리] 약점 분석 및 학습하기(2차원 배열)

약점 지식 학습하기이전에 업로드한 코드트리 갭체크 이후..👇2026.05.25 - [분류 전체보기] - [코드트리] 코딩테스트 기본부터 준비하기 / 갭체크 후기 [코드트리] 코딩테스트 기본부터 준비하기 / 갭체크 후기본격적으로 코딩테스트를 준비하려고 했더니..백준이 사라져 곤란하던 차에 SNS에 떠서 알게 된 코드트리..마침 청약통장 챌린지를 진행하길래 참여해봤다.이미 1회차 기간이 지난 시점이었고, 2jaemi-gotong.tistory.com부족한 지식에 대한 학습을 위해서 추천챕터를 공부해봤다. 개발공부를 좀 했어도 코딩테스트 자체는 입문자 수준이었나보다..1,2차원 배열에 대해서 모두 부족하다는 결과가 나왔었다. 솔직히 이렇게까지 코테 실력이 부족할 줄은 몰랐는데, 갭체크를 통해서 객관적인 나의..

카테고리 없음 2026.06.01

[코드트리] 코딩테스트 기본부터 준비하기 / 갭체크 후기

본격적으로 코딩테스트를 준비하려고 했더니..백준이 사라져 곤란하던 차에 SNS에 떠서 알게 된 코드트리..마침 청약통장 챌린지를 진행하길래 참여해봤다.이미 1회차 기간이 지난 시점이었고, 2회차 인증 때는 갭체크만 한세월하다가 (하다말다 하다말다 함)3회차 때 드디어 갭쳌을 끝내서 인증을 진행했다..ㅜ 어차피 이용권을 못 받을 거 같긴한데 마지막 회차 인증 진행할 때까지만이라도 코드트리를 열심히 이용해보자는 생각으로 킵고잉ㅋㅋㅋ 갭체크코테를 풀다보면 내가 지금 뭘 알고 뭘 모르는지를 잘 모르게되는 즉 메타인지가 흐려지는 순간이 있는데, 코드트리에서는 갭체크라는 것을 통해 지금 내 수준을 비교적 확실하게 체크해볼 수 있었다. 먼저 현재 내 코딩 목표를 설정하고 몇가지 문제를 풀면, 풀이 방식이나 시간 등을..

카테고리 없음 2026.05.25

[코테/java] 10진수를 2진수로 변환하기

문제10진수를 입력받아 2진수로 변환해 반환하는 solution()함수를 구현하세요. [제약조건]decimal은 1이상 10억 미만의 자연수 풀이 과정1. 10진수 N을 2로 나누고 몫은 홀드하고 나머지는 저장한다.2. 앞에서 나눈 결과값인 목이 0이 아니라면 1번을 다시 반복한다.3. 몫이 0이 될 때까지 나눴다면 1번에서 저장한 수를 최근 계산한 것부터 순서대로 나열한다. 정답 코드import java.util.Stack;public class Solution { public static String solution(int N) { Stack stack = new Stack(); while (N > 0) { stack.push(N % 2); ..

코딩테스트 2026.02.02

코드를 깔끔하고 직관적이게(1) - 디자인 패턴(Design Pattern)이란?

코드를 작성하다보면 으레 고민해야 하는 문제들이 있다. 객체를 어떻게 어디에서 생성할지, 객체 간 소통을 어떻게 하도록 설계해야 할지, 반복되는 코드들을 어디에서 관리할지 등... 개발을 공부하고 나서 초반에는 그냥 되는대로 작성했었다. 그렇다보니 즉흥적이고 규칙없이 직관성없는 스파게티 코드가 되기 일쑤였다. 디자인패턴은 이러한 문제들에 대해 검증된 해결책을 정리해놓은 설계 템플릿이라고 할 수 있다. 1994년 GoF(Gang of Four)라고 불리는 네명의 개발자가(그래서 four구나..) 디자인 패턴 23개를 정리하면서 알려지게 되었다고 한다.디자인패턴, 왜 사용해야 할까?- 커뮤니케이션이 수월해진다.- 검증된 구조를 재사용할 수 있다.- 유지보수하기 좋다.디자인 패턴을 3가지로 분류하면1. 생성 ..

Programming/Java 2025.11.25

[Spring] Batch작업이란?

Spring Batch란? 배치 처리는 주기적으로 대량의 반복적인 데이터 작업을 수행하기 위해 사용하는 방식이다. 예를 들어 백업, 삭제나 필터링 같은 특정 데이터를 처리하는 일을 개별 트랜잭션에서 진행해야 하는데 이런 작업들은 지금 당장 결과가 필요하지 않은 경우가 많다. 이러한 작업들을 모아서 자동으로 처리하는 것이 Batch이다.Batch가 필요한 이유?반복적으로 수행되어야 하는 태스크를 보다 효율적으로 실행하기 위함이다.하루 매출 정산월별 통계 계산로그 분석대량의 알림 발송데이터 백업 / 정리이런 작업을 리소스 사용량이 많은 시간대에 처리하면응답 지연😱서버 부하 폭증😱서비스 장애 가능성 증가😱등의 우려가 있다. 따라서 Batch는 서비스 운영의 부담을 덜어주는 역할을 한다.Batch의 특징..

Programming/Spring 2025.11.19

[DB] DDL, DML, DCL

SQL 명령어는 목적에 따라 크게 DDL, DML, DCL 이렇게 세 가지로 분류된다. 개인적으로 글자도 비슷비슷해서 공부하면서 헷갈렸다...그래서 정리하기 위한 글을 작성해보기로 했다! 각각의 역할과 차이를 명확하게 이해해보자.DDL(Data Definition Language) - 데이터 정의어DDL은 데이터베이스의 구조를 정의하고 변경하는 명령어이다. 즉 테이블을 만들고 수정하고 삭제하는 작업이라고 생각하면 된다.-- 테이블 생성CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(100) NOT NULL, role VARCHAR(20));-- 컬럼 추가ALTER TABLE users ADD COLUMN created_at TIME..

[Server] 캐시의 정의와 캐시 유형

캐시(Cache)캐시란 자주 접근하는 데이터를 빠르게 가져오기 위해 임시로 저장해두는 저장소라고 할 수 있다. 예를 들어 온라인 쇼핑몰의 메인 페이지에서 보이는 데이터(인기 상품, 신상품 등)는 사용자 수가 많아질 수록 조회 횟수가 늘어나는데 이때 한 번 불러온 데이터를 일정 기간 캐시에 저장해두고, 다음의 동일한 요청부터 DB에서 불러오지 않고 캐시에서 바로 가져와서 빠르게 응답하도록 하는 상황을 생각해볼 수 있다. 캐시의 필요성1. 자주 접근하는 데이터를 빠르게 조회2. 원본 데이터 소스의 부하를 감소 시킴- 캐시가 없는 요처으이 경우, 데이터베이스로 직접 전달되어 자원을 소모시키게 되는데 캐시를 사용할 경우 동일 데이터를 여러 번 요청해도 데이터베이스에서는 한 번만 조회하면 되므로 DB 연결 수가 ..

Programming/Server 2025.10.22

[Server] 로컬 캐시와 분산 캐시

로컬 캐시와 분산 캐시는 캐시 데이터가 저장되는 위치와 공유되는 범위에서 근본적인 차이가 있다.1️⃣로컬 캐시 (Local Cache): 로컬 캐시는 애플리케이션 내부 메모리(RAM, JVM 힙메모리 등)에 데이터를 저장하는 캐시 구조이다. 각 서버 인스턴스는 자신만의 독립적인 캐시 저장소를 가지며 이는 각자가 책상 위에 개인용 메모 노트를 두는 것과 같다고 볼 수 있다.로컬 캐시는 서버 자체에 존재하므로 외부 네트워크 요청 없이 가장 빠르게 데이터에 접근할 수 있다.장점네트워크 호출이 없고 자신의 메모리에서 바로 데이터를 읽어오므로 응답 속도가 가장 빠르다별도 캐시 서버를 구축하거나 관리할 필요 없이 단순 구현이 가능하다(HashMap, Caffeine 등)단점서버마다 캐시가 달라서 데이터 불일치 가능..

Programming/Server 2025.10.21

[Spring]@Cacheable, @CachePut, @CacheEvict

1️⃣@CacheableSpring Cache의 가장 기본적이자 핵심적인 어노테이션이다. 캐시가 있으면 메서드를 실행하지 않고, 캐시가 없으면 메서드를 실행하고 결과를 캐시에 저장한다. 동작 방식메서드 호출 시, 지정된 캐시(Key)가 이미 존재하는지 확인.존재하면 DB나 외부 호출 없이 캐시의 결과를 바로 반환.존재하지 않으면 메서드를 실행하고, 반환값을 캐시에 저장.// "users" 캐시 저장소에 userId를 키로 사용@Cacheable(value = "users", key = "#userId")public User findUserById(Long userId) { // 캐시에 없으면 이 로그가 찍히고 DB 조회가 발생한다. log.info("Fetching user from DB: {..

Programming/Spring 2025.10.20