전체 글 871

Django nested Serializer update 시 선언되지 않은 field 문제

1. 문제점 부모 - 자식의 구조를 갖는 Nested된 Serializer 구조를 사용했는데, update 메서드를 Django에서 지원하지 않는다고 하면서 아래 같은 에러 메시지가 뜬다. AssertionError: The `.update()` method does not support writable nested fields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields. 2. 해결 방안 필드를 사용할 때 반드시 Model에서 역참조로 related_name 값으로 정의한 이름으로 사용해주어야 한다. School : People ..

mysql dump(docker instance)

local에서 docker instance를 통해 mysql을 구동하여 사용하고 있는 경우, dump 방법 macOS 기준, DataGrip 활용 1. terminal에서 mysqlworkbench 캐스크로 설치 $ brew install --cask mysqlworkbench -> 일반 mysql을 brew install로 local에 설치해버리면, 기존 docker instance로 떠있는 mysql 설정을 DataGrip이 참고하던게, local용 mysql 설정을 참조하면서 권한이 밀리는 것 같음. Access Denied가 뜸! 이럴 땐 brew services stop mysql로 local로 설치된 mysql을 중단시켜버리고 docker로 실행하는 애플리케이션의 mysql container가..

Project/Poppin 2024.01.01

코틀린 logback 환경 분리, validated 검증, exception 처리, CD 적용

1. 코틀린 logback 환경 분리 라이브러리 import implementation("org.springframework.boot:spring-boot-starter-logging:3.1.5") resources/ 하위에 logback-spring.xml 파일을 만든다. 반드시 이 이름이여야한다. slack에 메시지를 보내는 설정을 포함했다. 로 환경을 구분할 수 있다. timestamp, property, appender, root 등의 logback 문법을 따른다. %d %-5level %logger{35} - %msg%n ${SLACK_WEBHOOK_URI} %d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n ...-${HOSTNAME} ... true %d %-5level %log..

Project/Poppin 2024.01.01

스프링부트: 시큐리티- 회원가입, 로그인 기능 추가하기, swagger 로그인 하기, @ControllerAdvice

스프링부트 - 코틀린 - 스프링 시큐리티를 사용해서 회원가입, 로그인 기능을 구현한 내용을 기록해둔다. 상세한 내용들은 워딩만 알면 구글링을 하든 GPT에게 물어보든 얼마든지 알 수 있다. 여기서는 전체적인 개념과 작동원리가 어떻게 되는지 개략적으로 살펴본다. 1. 스프링 시큐리티 회원가입, 로그인 기능 추가 라이브러리 상기 언급한 스택에서 기본적인 라이브러리는 설치한다. spring-security는 3.1.5 버전을 사용했다. implementation("org.springframework.boot:spring-boot-starter-security:3.1.5") 목표 JWT 토큰을 활용한 회원가입/로그인 처리를 한다. Refresh 토큰은 처리하지 않는다. 나중에 migration 해도 된다. Ro..

Project/Poppin 2023.12.25

S3 이미지 업로드 구현, Profile 설정 및 불러오기, Swagger 이미지 업로드(multipart)

1. S3 이미지 업로드 구현 설정 파일 추가 @Configuration open class AwsConfig { @Value("\${cloud.aws.credentials.accessKey}") private val accessKey: String? = null @Value("\${cloud.aws.credentials.secretKey}") private val secretKey: String? = null @Value("\${cloud.aws.region.static}") private val region: String? = null @Bean open fun amazonS3(): AmazonS3 { val awsCredentials: AWSCredentials = BasicAWSCredential..

Project/Poppin 2023.12.25