[DevOps] Docker Compose PostgreSQL 초기화 실패, Role does not exist 오류와 로컬 DB 포트 충돌 해결기
·
카테고리 없음
도커 컨테이너 PostgreSQL과 로컬 PostgreSQL이 5432 포트에서 충돌할 때 발생하는 문제를 해결한 경험 혹시나 저와 같은 상황을 겪고 계시는분들이 있을까 싶어 글을 남겨봅니다.1. 문제 상황Spring Boot 백엔드와 PostgreSQL을 Docker Compose로 구성하려고 했습니다.하지만 DB 컨테이너를 띄우자마자 로그에서 아래와 같은 오류가 반복되었습니다. # 오류메세지FATAL: password authentication failed for user "postgres"DETAIL: Role "postgres" does not exist.Connection matched pg_hba.conf line 100: "host all all all scram-sha-256" 제 상황..
[Weekly Paper] AOP(Aspect Oriented Programming)란? Spring에서 AOP가 필요한 이유와 사용 방법
·
카테고리 없음
AOP(관점 지향 프로그래밍)란? 공통 관심사를 분리하여 코드의 재사용성과 유지보수성을 향상시키는 것.AOP는 횡단 관심사(cross-cutting concerns)를 분리하여 모듈성을 높이는 프로그래밍 패러다임이다.AOP가 필요한 이유- 코드 중복 제거: 로깅, 트랜잭션 관리, 보안, 예외 처리 같은 기능은 여러 클래스에서 반복적으로 사용된다. (실행 시간 측정 등...) AOP를 활용하면 이러한 중복을 제거하고 유지보수성을 높일 수 있다.- 관심사의 분리: 핵심 비즈니스 로직과 부가적인 기능을 분리하여 코드의 가독성과 재사용성을 높일 수 있다.- OOP의 한계 극복: 객체지향 프로그래밍(OOP)만으로는 모든 관심사를 모듈화하기 어려운 경우가 많다. AOP를 사용하면 특정 기능을 모듈화하여 코드 구조를..
[Weekly Paper] Spring Framework의 탄생배경과 장점
·
카테고리 없음
1. 기존 JAVA 엔터프라이즈 애플리케이션 개발의 문제점- 기업 애플리케이션의 복잡성이 급격하게 증가하고, 대규모 트랜젝션 처리, 분산 시스템, 보안 요구사항이 늘어남에 따라 이러한 복잡한 요구사항들을 개발자가 효과적으로 관리할 수 있게하는 프레임워크나 컴포넌트 모델이 필요해졌다.그래서 서버사이드 개발의 효율화를 목표로 EJB(Enterprise JavaBeans) 라는 것이 등장하였지만, 복잡한 설정과 개발과정 때문에 기대만큼의 효율을 제공하지 못했다. - EJB(Enterprise JavaBeans)의 한계: 복잡한 설정과 개발 과정, 무거운 컨테이너, 테스트 어려움, 높은 결합도와 유연성 부족 등2. 탄생 배경 위와 같은 이유로 더 경량화되고 유연한 프레임워크가 필요해졌다. 그래서 로드 존슨(Ro..
[Weekly Paper] O(n) vs O(log n) 시간복잡도 비교
·
카테고리 없음
결론부터 말하자면, 데이터가 정렬되어 있고 이진 검색이 가능한 상황이라면,O(log n) 알고리즘을 사용하는 것이 훨씬 효율적이다.왜그럴까? O(n)과 O(log n)의 성능 차이를 도서관에서 책을 찾는 예시로 살펴보자. O(n) - 선형 검색도서관에서 책을 찾을 때 첫 번째 책장부터 순서대로 하나씩 모든 책을 확인하는 방식과 같다. 마치 정리되지 않은 책장에서 원하는 책을 찾기 위해 한 권씩 확인하는 것이다. 책이 100권이면 최악의 경우 100번, 1000권이면 1000번의 확인이 필요하다. O(log n) - 이진 검색정렬된 도서관에서 도서번호로 책을 찾는 방식이다. 중간 지점을 확인하고, 찾는 번호가 더 크면 오른쪽 절반을, 작으면 왼쪽 절반을 검색하는 방식이다. 매번 검색 범위가 절반으로 줄어든..
[Weekly Paper] HashSet의 내부 동작과 중복 제거 매커니즘
·
카테고리 없음
HashSet을 사용해서 Channel에 있는 user목록을 구현하려고 했으나 실패했다. 그래서 중복을 허용하지 않는 HashMap을 이용하여 구현하였는데, 왜 똑같은 중복을 허용하지 않는 자료구조이지만 HashSet은 안되고, HashMap은 되는지 문득 내부 동작 방식과 중복 제거 메커니즘이 문득 궁금해졌다.  1. HashSet의 내부 동작 일단 먼저 HashSet을 뜯어보았다. HashSet은 내부적으로 HashMap을 사용하는 것을 찾을 수 있었다. 그럼 이제 요소를 추가하는 add()를 찾아보자. HashSet의 add()는 HashMap의 put()을 사용함을 알 수 있었다.HashSet에 들어갈 요소 자체를 key값으로 사용하고, value에는 더미 객체를 사용하고 있었다. 그렇지만 왜 같..
[Weekly Paper] map과 flatMap의 차이점 - JAVA Stream API
·
카테고리 없음
차이점이 둘의 큰 차이점은 다음과 같다. map은 1:1 변환을 수행 / flatMap은 1:N 변환을 수행map은 변환 결과를 그대로 유지 / flatMap은 변환 결과를 단일 레벨의 스트림으로 평탄화  Map- 1 : 1  매핑- 각 요소당 정확히 하나의 결과를 생성한다. 즉, 1 -> 1- 결과는 새로운 스트림으로 반환된다. - 예시 코드List names = Arrays.asList("john", "maria", "david");List lengths = names.stream() .map(name -> name.length()) // String -> Integer로 변환 .collect(Collectors.toList()); // 결과: [4, 5, 5]  FlatMap- 1 : ..
[Weekly Paper] 객체지향 프로그래밍의 SOLID 원칙
·
카테고리 없음
소프트웨어 개발에서 지속 가능하고 유지보수가 용이한 코드를 작성하는 것은 매우 중요하다. 특히 객체지향 프로그래밍에서는 이를 위한 다섯 가지 핵심 설계 원칙이 있는데, 이를 SOLID 원칙이라고 한다. 로버트 마틴(Robert C. Martin)이 2000년대 초반에 주창한 이 원칙들은 현대 소프트웨어 개발의 근간이 되었으며, 많은 개발자들이 이를 따르고 있다. SOLID는 다섯 가지 핵심 설계 원칙의 앞글자를 따서 만든 단어이다.- SRP: 단일 책임 원칙(Single Responsibility Principle)- OCP: 개방-폐쇄 원칙(Open-Closed Principle)- LSP: 리스코프 치환 원칙(Liskov Substitution Principle)- ISP: 인터페이스 분리 원칙(In..
[Weekly Paper] Git merge vs rebase / fetch vs pull
·
카테고리 없음
1. merge vs rebase merge와 rebase는 모두 내용을 합치기 위한 방법이다. 그러나 합치는 과정에서의 차이점이 존재한다.Merge 변경사항을 하나의 브랜치에서 다른 브랜치로 합치는 것으로, 브랜치 별 히스토리가 남는다.git merge [가져올 브랜치명] Rebase 변경사항을 하나의 브랜치에서 다른 브랜치로 옮겨 새로운 시작점(기반)으로 삼는 것으로, 히스토리를 깔끔하게 유지하고 싶은 경우에 사용한다.  글로는 잘 이해가 되지 않으나, 그림을 보면 바로 이해가 될 것이다.이미지 출처 : Git의 Merge와 Rebase의 차이그 외 squashing과 pull requestSquashing: All commits are preserved in both cases (for exampl..