분류 전체보기49 Java 어노테이션 (메타데이터, MVC패턴, 레이어드 아키텍처) @Override 하나 붙인다고 코드가 달라질 거라고 생각하셨나요? 저도 처음엔 그냥 IDE가 붙여주는 장식 정도로 여겼습니다. 그런데 직접 커스텀 어노테이션을 만들고 리플렉션으로 클래스 동작을 제어해보니, 어노테이션이 단순한 메모가 아니라 실행 흐름 자체를 바꾸는 장치라는 걸 몸으로 이해하게 됐습니다.어노테이션, 그냥 주석이 아니었습니다어노테이션(Annotation)이란 Java 소스코드에 메타데이터(Metadata)를 추가하는 기능입니다. 여기서 메타데이터란 코드 자체의 로직은 아니지만, 코드가 어떻게 처리돼야 하는지 부가 정보를 제공하는 데이터를 의미합니다. @Override, @Deprecated처럼 JDK에서 기본 제공하는 것부터, @Autowired나 @RequestMapping처럼 Sprin.. 2026. 6. 17. 자바 제네릭과 컬렉션 (Generic, Collection, 타입 안전성) 솔직히 처음에 List이나 ArrayList를 봤을 때, 저는 그냥 "그냥 따라 쓰면 되는 거 아닌가" 하고 넘겼습니다. 꺾쇠 기호가 뭘 의미하는지, 왜 굳이 타입을 저기에 적어야 하는지 제대로 이해하지 못한 채로요. 그러다 실제로 서버 코드를 짜면서 이 두 개념이 얼마나 긴밀하게 연결되어 있는지 뼈저리게 느꼈습니다.Generic — 타입을 나중에 결정하는 방식이 왜 필요한가처음 Generic을 마주했을 때 저는 "그냥 Object 타입 쓰면 되는 거 아닌가"라고 생각했습니다. 실제로 Generic 없이 컬렉션을 쓰면 아무 타입이나 넣을 수 있거든요. 그런데 이 생각이 틀렸다는 걸 실습 도중 꽤 창피하게 알게 됐습니다.Generic(제네릭)이란 클래스나 메서드를 선언할 때 타입을 고정하지 않고, 사용하는.. 2026. 6. 16. 스택 자료구조 (LIFO, 후위식 변환, DFS) 자료구조 공부를 시작할 때 큐(Queue)와 스택(Stack)이 제일 헷갈렸습니다. 이름은 아는데 막상 코드로 구현하려고 하면 손이 멈추는 그 느낌, 저도 똑같이 겪었습니다. 이번 글에서는 스택의 개념부터 실제 활용인 후위식 변환, 그리고 DFS 탐색까지 제가 직접 구현하면서 정리한 내용을 풀어보겠습니다.스택 구현과 후위식 변환스택은 LIFO(Last In First Out) 방식으로 동작하는 자료구조입니다. 여기서 LIFO란 가장 마지막에 들어온 데이터가 가장 먼저 나오는 구조를 말합니다. 접시를 쌓는 모습을 떠올리면 쉽습니다. 맨 위에 올려놓은 접시를 먼저 꺼내야 하는 것처럼, 스택도 마찬가지입니다.저도 처음에 선입선출(FIFO)과 헷갈려서 꽤 고생했습니다. 둘의 차이를 명확히 잡고 나서야 코드가 눈.. 2026. 6. 15. 스프링 부트 입문 (IoC/DI, JPA, Spring Security) 솔직히 처음 Spring Boot를 접했을 때 가장 당황했던 부분은 new 키워드가 없어도 객체가 알아서 생겨난다는 점이었습니다. 분명히 어디서도 객체를 만든 적이 없는데 실행하면 콘솔에 "서비스 객체 생성됨"이 찍혀 있었습니다. 이게 도대체 왜 되는 건지 이해하는 데 꽤 시간이 걸렸고, 그 과정에서 Spring Boot의 핵심이 무엇인지 조금씩 보이기 시작했습니다.IoC와 DI, 객체를 내가 안 만들어도 되는 이유Spring Boot의 핵심을 한 마디로 표현하면 제어의 역전, 즉 IoC(Inversion of Control)라고 할 수 있습니다. IoC란 객체 생성, 연결, 관리 같은 작업을 개발자가 직접 처리하지 않고 프레임워크가 대신 처리하는 방식을 말합니다. 원래 자바 코드에서는 new TestS.. 2026. 6. 14. Spring Boot 파일 업로드 (Multipart, 로컬저장, S3) 파일 하나 올리는 데 컨트롤러, 서비스, 유틸, 인터페이스까지 네 군데를 건드려야 한다는 걸 처음 알았을 때 솔직히 당황했습니다. 단순히 @RequestBody를 @RequestPart로 바꾸면 끝나는 줄 알았는데, HTTP 요청 프로토콜 자체가 바뀐다는 사실을 몸으로 겪고 나서야 구조가 눈에 들어왔습니다. 이 글은 그 과정을 순서대로 정리한 기록입니다.Multipart와 @RequestPart — 파일 전송이 왜 달라지는가일반적인 JSON 데이터를 주고받을 때는 Content-Type이 application/json으로 고정됩니다. 그런데 클라이언트가 파일을 함께 보내는 순간, HTTP 요청의 Content-Type이 multipart/form-data로 바뀝니다. 여기서 multipart/form-d.. 2026. 6. 13. Docker 커스텀 이미지 (Dockerfile, 컨테이너, docker-compose) Dockerfile 하나면 java 설치부터 jar 실행까지 전부 자동화됩니다. 처음 이 사실을 알았을 때 솔직히 이건 예상 밖이었습니다. 매번 서버에 접속해서 손으로 설치하던 게 파일 한 장으로 끝난다는 게 믿기지 않았거든요. 직접 써보고 나서야 "왜 진작 이걸 안 썼지"라는 생각이 들었습니다.Dockerfile로 백엔드·프론트 이미지 직접 만들기일반적으로 Docker는 MariaDB나 Nginx 같은 공식 이미지를 그냥 내려받아 쓰는 도구라고만 생각하는 분들도 있는데, 실제로 써보니 내가 만든 프로젝트 자체를 이미지로 패키징해서 배포하는 게 핵심이었습니다.백엔드 기준으로 기존 배포 방식을 먼저 짚어보면, Spring Boot 프로젝트를 bootJar로 빌드해서 jar 파일을 만들고, 서버에 java를.. 2026. 6. 12. 이전 1 2 3 4 5 ··· 9 다음