분류 전체보기 46

[면접-Spring] Spring AOP란?(미완성)

트랜잭션 어노테이션을 보다가 AOP가 좀 더 궁금해졌다.우테톡을 아주 잘 봤다...(참고: https://www.youtube.com/watch?v=Hm0w_9ngDpM) 1. 개요AOP가 어떻게 동작하는진 둘째치고, 이게 왜 나왔는지부터 살펴봤다. 핵심은 비즈니스 로직과 그 외 부가 기능을 분리해서 관심사를 나누고, 반복되는 코드를 줄이기 위해 나온 것이라는 점이다. 비즈니스 로직, 즉 우리가 서비스 단에서 작성하는 애플리케이션 로직은 핵심 기능이다.그 외에 로깅, 시간 측정, 트랜잭션 같은 건 부가 기능으로 볼 수 있다. 다른 말로는 인프라 로직이라고 한다. 또 SRP 관점에서 보면 클래스를 바꾸는 이유는 하나여야 한다.그런데 핵심 기능을 부가 기능 때문에 건드리는 게 맞을까? 그건 아닐 것이다.또..

개발/Spring Boot 2025.10.09

[면접-Spring] @Transactional에 대해

스프링은 AOP를 통해 개발자가 쉽게 트랜잭션을 다룰 수 있게 해준다. 하지만 최근에 트랜잭션을 사용하며 self invocation 에러가 계속 뜨기도 하며, DB 락 등에 대해 공부를 하다보니 Transaction에 대해 정확히 알아야 할 필요성을 느꼈다... 자주 써서 별거 아닌 것 같지만 사실 매우 중요한 개념이라... ㅎㅎ 1. Transaction 이란?단일한 논리적인 작업 단위다.논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나뉠 수 없게 한 것이다.따라서 트랜잭션의 안의 SQL문들 중에 일부만 성공해서 반영되는 경우는 없다. All or Nothing 이다. 2. Transaction 기본 동작?메서드나 클래스에 트랜잭션 경계를 선언한다. 이 때 직접 코드로 선언할 수도 있고,..

개발/Spring Boot 2025.10.07

[Spring] IoC & DI란?

최근에 SOLID에 대해 썼으니 IoC랑 DI에 대해 좀 더 수월하게 쓸 수 있을 것 같았다.Spring을 왜 쓰는지와 연관이 되어 있기 때문에 정리가 필요하다. 우선 IoC랑 DI를 한글로 풀어써보자.IoC는 제어의 역전, DI는 의존성 주입이다. 1) IoC 란?객체의 생성과 생명주기 관리(제어)를 개발자가 아닌 프레임워크(외부)가 담당(위임)하는 것이다. 이는 스프링 프레임워크의 핵심 원리이며, DI를 통해 IoC를 구현한다. 그러면 스프링 컨테이너(IoC Container)는 애플리케이션의 객체들을 생성하고 관리해준다. 즉, new 키워드로 객체를 생성하지 않고, 스프링 컨테이너에서 생성한 객체(Bean)를 받아와서 사용한다는 것이다. new를 통해 객체를 생성하면 의존성(결합도)이 엄청나게 ..

개발/Spring Boot 2025.10.06

[면접-Java] POJO 객체 비교

옛날에 HashMap 에 대해 글을 썼기 때문에 이번 글과 겹치는 부분이 많다. 하지만 POJO 객체 비교에 대한 글을 쓴 적은 없어서 비슷하지만 살짝 다르다. 왜 equals, hashCode를 오버라이딩해야하는지 동일성, 동등성 기준으로 쓰려한다.또한 오픈소스 스터디를 하면서 발표 자료를 정리해둔 게 있기 때문에 그거 기반으로 .. ㅎㅎ 1. 개요 먼저 POJO란?Plain Old Java Object의 줄임말이다. 특별한 상속이나 프레임워크 없이 순수한 자바 객체이다. Object 클래스란? 자바에서 모든 클래스의 최상위 클래스다형적 참조와 메서드 오버라이딩을 지원 → 특정 클래스에 의존하지 않고 코드 작성 가능하다. 즉, OCP 원칙을 준수할 수 있다. equals() 메서드란? 객체의 동등성 비..

[면접-설계] 대규모 트래픽 시스템을 어떻게 설계할 것인가?

이번에 자소서를 쓰면서 위와 같은 문항이 있었다.현업 뛰고 있는 형들이 말해준 걸 토대로 정리하려한다. 최대한 신입 관점에서 말이다!대규모 시스템을 직접 당장 건드릴 일은 없을지언정, 핵심은 알아야 한다고 생각했다. 1. 개요대규모 시스템은 어느정도 돼야 대규모라고 할까....사용자 수, 데이터 처리량, 트래픽, 안정성, 스케일링 등 복합적인 요소가 함께 고려돼야 한다고 한다.명확한 기준이 딱히 없어서 그런가 찾아도 제대로 안 나온다. "어느정도 규모여야 대규모라고 생각하시나요?" 라는 질문을 면접에서 받아봤다는 얘기도 들었다. 그래서 AI한테 물어봤다. 항목소규모중규모대규모동시 사용자1,000 ~ 100,000100,000+QPS (초당 요청 수)100 ~ 10,00010,000+서버 수1~5수십 대수..

카테고리 없음 2025.10.05

[Spring] 도메인 주도 설계 생각...

길게 쓴다면 길게 쓸 주제이고, 아니라면 아닌 주제라고 생각한다...사이드 프로젝트를 진행할 때 DDD 설계를 해왔다고 생각했는데, 책을 읽다보니 아니었던 거 같아서 짧고 굵게 정리하려한다. 자바/스프링 개발자를 위한 실용주의 프로그래밍 중 "레이어드 아키텍처" 파트를 보면서 든 생각이다. 아닌 분들도 많겠지만, 개발할 때 보통 아래 처럼 구조를 잡곤 한다.필자가 하고 싶은 말은 위처럼 "잘못된 레이어드 아키텍처는 레이어를 지나치게 추상화한다" 이다.개발을 진행할 때, API 부터 접근하든 DB부터 접근하든 " 두 방법이 모두 잘못됐으니 무조건 고쳐야한다."는 아니지만, 둘 다 썩 좋은 접근은 아니라는 것이다. API 부터 접근하게 된다면 특정 프레임워크에 종속될 수 밖에 없고, 기술 스펙을 결정해버리..

개발/Spring Boot 2025.10.04

[면접-oop] 객체지향 SOLID 원칙

객체지향 개발론 수업 때 많이 봤지만, 오랜만에 다시 설명하라하면 못 하겠는..그런 개념..면접 때 아주 중요하다고 하니 정리하려한다. 1. 개요객체지향 하면 따라오는 필수 개념이다. 이걸 왜 지킬까? 왜 알아야 할까? 결국 개발하다보면 밥먹듯 등장하는 그 단어, "유지보수성"과 "확장성" 때문이다.또한 실무에서 유지보수성을 판단할 때는 세 개의 요소를 고려한다고 한다. "코드 변경의 영향 범위", "의존성", "확장성". 확장성이 사실 제일 중요하다. 5가지가 있다.- 단일 책임 원칙(SRP)- 개방 폐쇄 원칙(OCP)- 리스코프 치환 원칙(LSP)- 인터페이스 분리 법칙(ISP)- 의존성 역전 원칙(DIP) 개념은 자바/스프링 개발자를 위한 실용주의 프로그래밍 책을 참고했다.다른 서적들에 비해 비교적..

[면접-os] 디스크 I/O가 높으면 좋지 않은 이유?

흔히 개발 관련 유튜브, 자소서, 면접 리스트 등을 보면 디스크 I/O 얘기가 많이 나온다.그래서 그게 뭔지, 뭐가 문제인지 간단히 정리하려한다. 1. 개요 & 문제디스크 I/O는 말 그대로 SSD나 HDD 같은 디스크에서 데이터를 읽고 쓰는 작업이다. 즉, 메모리 캐시로 해결이 안 돼서 실제 디스크 접근이 발생한다는 뜻이다.보통 우리가 쓰는 컴퓨터는 솔직히 이젠 너무 빠르기 때문에 생각 없이 쓰곤 한다. 몇기가 짜리 영화도 이젠 솔직히 느리다고 안 느껴진다.하지만 서버 환경에서는 디스크 속도가 전체 성능을 저하시키는 병목이 될 수 있다.특히 클라우드 환경에서 EBS와 같은 블록 스토리지 종류(SSD/HDD, IOPS 성능 등)를 선택할 수 있는데, 낮은 성능 스토리지를 사용하면 병목이 아주 쉽게 발생할..

[면접-네트워크] HTTP 버전(feat. 1.1 vs 2.0)

HTTP 버전에 대해 작성하려한다.자세하게 질문 들어오면 대답을 제대로 못 할 것 같기 때문이다.네트워크도 깊게 파자면 끝도 없기 때문에, 글은 적당히... ㅎㅎ1. 개요우선, HTTP란?클라이언트와 서버 간 통신을 하기 위한 프로토콜 또한 HTTP 0.9 버전 부터 2.0 까지는 모두 TCP를 사용한다.3.0은 구글에서 개발한 QUIC로서 TCP 대신 UDP 프로토콜을 사용한다. 1.x 버전이라고 해서 다양한 버전이 있을 것 같지만/0.9 → /1.0 → /1.1 → /2.0 → /3.0이 뿐이다. 각 차이점과 변화만 제대로 알면 될 것 같다.2. 버전 별 차이1) 0.9 버전요청과 메서드가 매우 제한적이었다. 제한적이다 못해 GET 메서드만 지원됐다.One-line 프로토콜이라고도 불리며, 헤더와 상..