- join
- 프로그래머스
- 스프링
- select
- spring boot
- Django
- @transactional
- hibernate
- AWS
- java
- 스프링부트
- 데이터베이스
- static
- Docker
- DI
- nginx
- PYTHON
- spring
- string
- spring mvc
- SSL
- jpa
- sql
- 1차원 배열
- 문자열
- springboot
- ORM
- spring security 6
- mysql
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
목록분류 전체보기 (195)
개발하는 자몽

RDS MySQL를 사용하는 프로젝트에서 시간대가 맞지 않음을 알게 되었다. 타임존 설정을 까먹은 것...! 해당 DB 인스턴스의 설정을 바꾸는 일이므로 DB 파라미터 그룹을 새로 생성하여 수정하기로 했다. DB 파라미터 그룹DB 파라미터 그룹은 하나 이상의 DB 인스턴스에 적용되는 구성 값의 모음이다. DB 파라미터 그룹을 지정하지 않고 DB 인스턴스를 만드는 경우 DB 인스턴스에서는 기본 DB 파라미터 그룹을 사용한다. 기본 DB 파라미터 그룹 설정은 수정할 수 없으므로 새 파라미터 그룹을 생성해야 한다. 그리고 원하는 파라미터 설정을 변경하고, DB 인스턴스나 DB 클러스터를 수정하여 새로 생성한 파라미터 그룹을 연결하면 된다. AWS 콘솔로 들어가서 파라미터 그룹을 생성하자. 설정하기..

Spring 환경에서 STOMP 프로토콜을 사용하여 일대일 실시간 채팅을 구현해야 하는 일이 있었는데, 잘 알지도 못하고 설정에 SockJS 활성화를 추가했다. 클라이언트인 Flutter는 `StompClient` 라이브러리와 `ws` 프로토콜로 서버에 연결 요청을 시도했으나 계속 실패했다. 개발 시간이 촉박해서 제대로 STOMP와 SockJS에 대해 공부하지 않았던 탓에 계속 오류를 뿜어댔다... 아래는 Flutter에서 Spring 서버로 연결 시도 시 실패했던 Spring, Flutter 코드이다. Spring Boot 3.4.1@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMess..
if코틀린의 `if`문은 표현식(expression)으로, 아래와 같은 방식으로 변수에 값으로 할당될 수 있다. (삼항연산자를 풀어서 쓰는 느낌이다)fun main() { val a: Int = 100 val b: Int = 200 val c: Int c = if (a >= b) { a } else { b } println(c)} `null` 체크는 다음과 같이 할 수 있다. fun main() { val a: Int? = null if (a == null) { println("null check true") // print } else { println("a ..
요즘 스프링 개발 환경에서도 코틀린을 사용하는 경향이 꽤 보인다. 그래서 코틀린에 관심이 생겨서 찾아본 기본 문법! 변수 타입코틀린에는 `var`와 `val`라는 두 가지 형태의 변수가 존재한다.`var`: 초기화 이후에도 값 변경이 가능한 가변 변수`val`: 초기화 이후에는 값을 변경할 수 없는 불변 변수fun main() { var a = 1 a = 2 // 가변 변수이므로 값 변경 가능 val b = 1 b = 2 // 불변 변수이므로 에러 발생 var c: Int // 타입은 명시했으나, 초기화 하지 않은 상태 println(c) // 초기화 하지 않은 상태이므로 에러 발생 c = 1 // 초기화 println(c) // 1 출력}..

기존에는 EC2 우분투 환경에서 운영되는 프로그램들의 로그를 AWS CloudWatch에 전송할 수 있도록, 우분투에서 CloudWatch Agent 패키지를 설치하고 관련 설정을 진행했다. 이번에는 EC2(마찬가지로 우분투 환경)에서 Docker 컨테이너로 띄운 프로그램의 로그를 AWS CloudWatch에 전송할 수 있도록 설정을 해보자. 관련 공식 자료는 여기를 참고하자. (딱히 좋은 글인 것 같지는 않다...) CredentialsEC2 상에서 운영되는 Docker 컨테이너의 로그를 AWS CloudWatch에 전송하기 위해서는 `awslogs` 로깅 드라이버를 사용해야 한다. 이를 위해 자격 증명(credentials)이 필요하며, 해당 자격 증명을 Docker 데몬에 전달해야 한다. 자격 증..

⚠️이 포스트는 지식 공유보다는 본인이 나중에 다시 보기 위해 작성하는 기록용입니다... build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementation 'org.springframework.boot:spring-boot-starter-security' ...} application.ymlspring: security.oauth2: client.registration: kakao: client-name: Kakao client-id: ${CLIENT_ID} client-secret: ${..
일반적으로 Spring 애플리케이션에서 application.yml에 정의된 값을 static 변수에서 사용할 수 없다. 따라서 Spring에서 제공하는 `@Value` 애노테이션으로 설정 파일에 정의된 값을 static 변수에 주입하면 에러가 발생한다. Java의 static 변수는 아래 시점에 메모리에 저장된다. 스프링 컨테이너(Application Context)가 로드되기 전 == 객체 생성 이전 == 의존성 주입을 받기 전 하지만 `@Value`는 의존 관계 주입 시점(인스턴스 수준)에서 동작한다. 이로 인해 의존성 주입을 받기 전에 메모리에 저장되는 static 변수에는 값을 주입할 수 없다. 이는 더 나아가서 클래스 레벨에도 동일하게 적용할 수 있다. `@Component` 애노테이션이..
AWS Lambda 사용법을 조사하다가 Amazon API Gateway가 같이 언급되는 글이 많길래 왜 그런가 찾아봤다. 결론은 Lambda가 특별히 API Gateway가 필요해서 같이 붙어 다니는 건 아니었다. Lambda는 특성상 무거운 프로그램의 서버보다는, 한 가지 목적에 집중하는 가벼운 프로그램의 서버로 적합하다. 각 기능(인증, 스케쥴링, 모니터링 등)을 여러 개의 Lambda로 분리해서 API Gateway로 연결하는 편이 좋다. 다음은 API Gateway를 사용했을 때 얻을 수 있는 이점이다. Reusability Lambda 유무와 관계없이 API Gateway를 사용하면 새 프로젝트 시작할 때마다 인증 기능을 구현할 필요도 없다. 인증 기능이 배포된 서버를 API Gatewa..
상황1:N 관계가 얽혀있는 엔티티를 대상으로 Spring Data JPA를 이용해서 Pagination 조회를 하니 말로만 듣던 N+1 상황이 발생했다. 처음에는 일반적인 해결 방법인 Fetch Join을 사용하려고 했다. 더불어 중복을 방지하기 위해 `DISTINCT` 추가하려고 했다. 그러나 1:N 관계의 컬렉션을 Fetch Join 하면서 동시에 Pagination을 사용하는 것은 OutOfMemoryError가 발생할 수 있고, 이로 인해 `DISTINCT`를 적용할 수 없다고 한다. 그래서 찾은 다른 방법 중 가장 빠르고 쉬운 방법은 Batch Size를 설정하는 것이었다. 하이버네이트 Batch Size 하이버네이트에서 제공하는 `@BatchSize` 애노테이션이나 `batch_size`..
Gradle로 테스트를 빌드하다가 제목과 같은 에러를 만났다. 사실 처음에는 그냥 빌드하다가 위와 같은 정확한 에러명이 나오지 않아서 나중에 빌드할 때 아래 명령어를 사용했다. 그냥 빌드했을 때 실패했다고만 나오면 해당 옵션으로 시도하는 것을 추천한다👍./gradlew test -i # 윈도우 gitbash에서 실행 Note `-i / --info` 옵션은 로그 레벨을 INFO로 설정하는 것이다. 에러 내용을 봤을 때 yml/properties 파일에 작성한 프로퍼티 설정을 가져오면서 뭔가 문제가 있는 것 같았다. 그리고 역시나 `@Value`로 yml에 적힌 값을 가져올 때 오타가 있었다. 이 부분을 수정하고 다시 빌드하니 해당 에러는 더 이상 보이지 않았다! (관련 없는 다른 에러가 반겨주었..