분류 전체보기 104

[Java] 자바 알고리즘 풀 때 int vs long 언제 써야할까?

알고리즘 문제 풀다가 자바에서는 종종 int 를 쓰면 값이 이상하게 나오는 경우가 많다.파이썬은 숫자 범위 제한이 없어서 그냥 막 써도 괜찮은데, 자바는 자료형에 따라 범위가 정해져 있어서 조심해야함✔️ 기본 정수 자료형 범위자료형범위int약 ±21억long약 ±900경✔️ 자료형 선택 기준입력값의 최대 범위 확인하기배열 크기, 원소 값, 반복 횟수 등 다 확인단순히 값이 작아 보여도, 곱하거나 누적될 경우 주의곱셈, 누적합 등 중간 결과가 커지는 경우ex) 1_000_000 * 1_000_000 → 10^12 (int 넘음)이럴 땐 반드시 long 사용지수 연산이 있는 경우문제에서 "행렬 제곱", "A^B" 같이 나오는 경우반복적인 곱셈이 발생해서 수가 커질 수 있음✔️ 자주 하는 실수int a = 1..

Java/알고리즘 2025.03.23

BeanCopy는 편한데 왜 불안할까? 실무에서 setter로 바꾸게 된 이유

BeanCopy, 처음엔 정말 편했는데 ..서비스에서 DTO Entity 변환을 할 때,처음에는 BeanUtils.copyProperties(source, target) 같은 방식이 너무 편하게 느껴졌다.코드도 짧고, 작성도 빠르고, 당장은 문제 없어 보였다.하지만 점점 마음 한구석이 불편해진다?처음엔 편했지만, 시간이 지날 수록 이런 문제가 생기기 시작했다.어떤 값이 복사되는지 명확하지 않다.필드를 추가/삭제해도 에러가 안 나서 눈치 못 채고 버그 발생디버깅할 때 이 값 왜 들어가 있지? 같은 현상도 발생결국 복사되는 흐름이 코드에 드러나지 않다 보니,읽는 나도 헷갈리는데, 나중에 유지보수하는 사람은 더 헷갈리지 않을까? 하는 생각을 하게됐다.그래서 setter 방식으로결국 명시적으로 하나하나 설정하..

Java에서 CollectionUtils.isEmpty 대신 Optional을 써야할까?

CollectionUtils.isEmpty ? Optional ?개발 중에 이런 상황이 있었다.메서드 파라미터로 List를 받는데, 나는 아래와 같이 null 및 empty 를 체크하고 있었다.if (CollectionUtils.isEmpty(list)) { return;}// 처리 로직그러던 중, 선임 개발자한테 아래와 같은 피드백을 받은 적이 있다."왜 Optional 안 써? Optional 쓰면 더 깔끔하지 않아?" 그래서 궁금해졌다.Optional을 쓰면 정말 더 좋은 걸까?✔️  선임 개발자가 원하는 방향Optional.ofNullable(list) .filter(l -> !l.isEmpty()) .ifPresent(l -> { // 처리 로직..

[LeetCode/Java] 2. Add Two Numbers

https://leetcode.com/problems/add-two-numbers/ 알고리즘 문제를 풀다 보면, 가끔은 나도 모르게 ‘답만 나오면 된다’는 식으로 접근할 때가 있다.그런데 이번 문제를 풀면서 Linked List라는 자료구조의 본질적인 구조와 연결 방식을 다시 생각하게 됐다.단순한 구현 문제처럼 보여도, 기초를 다지는 데 정말 좋은 문제였던 것 같다.그래서 이 문제는 그냥 넘기지 않고, 블로그에 기록해두기로 🤭 [문제 간단 요약]두 개의 역순으로 저장된 Linked List가 있고, 각 노드는 한 자리 숫자를 담고 있다.이걸 실제 정수처럼 더해서, 결과를 똑같이 역순 Linked List로 리턴하기Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0..

[Spring] 프록시 패턴(Proxy Pattern)

✏️ 한 줄 정리프록시 패턴은 실제 객체 대신 프록시 객체가 요청을 가로채어, 추가적인 기능(트랜잭션, 로깅, 보안 등)을 수행한 후 실제 객체를 호출하는 디자인 패턴 프록시 패턴(Proxy Pattern) 이란 ?프록시 패턴은 객체에 대한 접근을 제어하기 위해 대리자(Proxy) 객체를 두는 디자인 패턴이다.즉, 실제 객체 대신 프록시 객체가 먼저 호출을 가로채고, 필요하면 실제 객체를 호출하는 구조를 가진 패턴 Spring에서 프록시 패턴을 사용하는 경우1. 트랜잭션 관리 (@Transaction)- 트랜잭션을 시작하고, 메서드 실행 후 커밋 또는 롤백 2. AOP (Aspect-Oriented Programming, @Aspect)- 로깅, 성능 모니터링, 보안 검증 등 부가기능 적용- @Befor..

Java/Spring 2025.03.17

[Spring] 트랜잭션

1. Spring에서 트랜잭션 관리Spring 프레임워크에서는 @Transactional 어노테이션을 사용해 간단히 트랜잭션을 관리할 수 있다. 트랜잭션은 보통 서비스 계층에서 사용되며, 데이터베이스의 상태를 변경하는 작업을 안전하게 처리한다.@Servicepublic class ExampleService { @Transactional public void insertDatabase() { // logic }} 위 코드에서 @Transactional 을 메서드에 적용하면, 메서드가 실행되는 동안 트랜잭션이 활성화된다. 만약 메서드 내에서 예외가 발생하면 트랜잭션이 자동으로 롤백된다.2. 전파 레벨(Propagation)Spring의 트랜잭션은 다양한 전파 레벨(Propagat..

Java/Spring 2025.03.16

[Spring Boot] 의존성 주입(DI)

✏️ 한 줄 정리생성자 주입을 사용하자Spring Boot에서 의존성 주입(Dependency Injection, DI) 방식에는생성자 주입, 필드 주입, 세터 주입이 있다. 1. 생성자 주입 (Constructor Injection) 가장 권장@Componentpublic class ExampleService { private final ExampleRepository exampleRepository; @Autowired // 최신 Spring 버전에서는 생략 가능 public ExampleService(ExampleRepository exampleRepository) { this.exampleRepository = exampleRepository; }} ✅ 불변성 유..

Java/Spring 2025.03.16

[네트워크] JWT vs 세션

한 줄 정리JWT -> 토큰 기반 인증 (서버가 상태를 저장하지 않음, RESTful API에 적합, 확장성 높음)세션 -> 서버에서 관리하는 인증 방식 (보안성이 더 높고, 일반 웹사이트에 적합)JWT (JSON Web Token)✔️ JWT는 인증을 위한 토큰✔️ 서버에서 발급한 후 클라이언트가 저장 & 사용하는 방식✔️ 로그인 성공 시 서버가 JWT를 생성해서 클라이언트에게 주고, 이후 클라이언트는 JWT를 포함해서 요청을 보냄✔️ 서버는 JWT만 확인하고 요청하기 때문에, 별도의 세션 저장소가 필요 없음 장점확장성 (Scalability) -> 서버에서 사용자가 상태를 저장할 필요가 없어서 수평 확장이 쉬움RESTful API와 잘 맞음 -> 서버가 Stateless(상태가 저장하지 않음)한 구조..

네트워크/기본 2025.03.16

[네트워크] 쿠키 vs 로컬 스토리지 vs 세션 스토리지 vs 세션

✔️ 한 줄 정리쿠키 -> 브라우저 & 서버 간 자동 전송, 작은 데이터 저장로컬 스토리지 -> 브라우저에 영구 저장, 서버에 안 보내도 되는 데이터세션 스토리지 -> 브라우저 탭 닫으면 사라짐, 일시적 데이터 저장 (폼 입력값)세션 -> 서버에서 관리하는 로그인 / 사용자 정보 (보안) 쿠키로컬 스토리지세션 스토리지세션저장 위치클라이언트(브라우저)클라이언트(브라우저)클라이언트(브라우저)서버데이터 크기 제한4KB5MB ~ 10MB5MB ~ 10MB서버에서 관리데이터 보존 기간설정된 만료일브라우저를 꺼도 유지됨(영구 저장)브라우저를 닫으면 사라짐기본적으로 브라우저 종료 시 삭제보안노출 취약상대적 안전상대적 안전서버에서 관리서버 전송 여부자동 전송자동 전송 X자동 전송 X서버에서 관리사용 목적로그인 유지, ..

네트워크/기본 2025.03.15

[네트워크] 쿠키와 세션

한 줄 정리쿠키 -> 클라이언트 저장, 보안 약함, 설정 저장용세션 -> 서버 저장, 보안 강함, 로그인 상태 유지용 쿠키 (Cookie)세션 (Session)저장 위치클라이언트 (브라우저)서버데이터 저장 방식브라우저가 쿠키 파일에 저장서버가 세션 저장소에 저장유지 시간만료 날짜 설정 가능 (영구 보관 가능)브라우저 종료 시 기본적으로 삭제보안데이터가 노출될 위험 있음서버에서 관리하므로 상대적으로 안전사용 목적최근 본 상품, 자동 로그인, 팝업 "오늘 하루 안보기"로그인 정보, 장바구니, 사용자 세션 유지예제Set-Cookie: user=Dengju; Expires=Fri, 31 Def 2025 23:59:59 GMTsession_id=abcd1234쿠키 (Cookie) 🍪클라이언트(브라우저)에 저장되..

네트워크/기본 2025.03.15