전체 글(409)
-
[도메인 주도 설계 철저 입문] 2장. 시스템 특유의 값을 나타내기 위한 '값 객체'
이 장에서는 '값 객체'에 대해서 다루고 있습니다.'값 객체'란 무엇일까요.도메인 주도 설계에서 말하는 값 객체는 이렇듯 시스템 특유의 값을 나타내는 객체다. 그리고 바로 다음 값의 성질을 설명하고 있습니다.변하지 않는다.주고 받을 수 있다.등가성을 비교할 수 있다. 이를 코드로 생각해보면 각각 다음과 대응된다고 생각했습니다.변하지 않는다. -> final주고 받을 수 있다. -> 대입으로 밖에 변경이 안 된다.등가성을 비교할 수 있다.(equals @override) 변하지 않는다.불변하는 값의 장점을 책에서는 다음과 같이 서술하고 있습니다.객체를 생성하고 메서드에 인자로 넘기니 자기도 모르는 사이에 상태가 수정되어 의도하지 않은 동작을 보이거나 버그를 일으켰다는 이야기는 ... 모르는 사이에 상태가 ..
2024.08.26 -
flyway로 DB 관리하기(with spring boot & gradle)
이 글에서는 flyway를 어떻게 spring boot에 적용하는지에 대해 작성하겠습니다. Flyway는 DB 버전 관리 툴로, 다양한 DB를 지원하고 마이그레이션을 지원합니다. 의존성 추가 및 기본 설정plugins { ... id("org.flywaydb.flyway") version "9.0.0"}dependencies { implementation("org.flywaydb:flyway-core")} build.gradle에 이렇게 두 개의 문장을 추가해 의존성을 추가해줍니다. flyway { url = db_url user = db_user password = db_password locations = arrayOf(db_migration_file_loc) # 기본 위치는 filesyst..
2024.08.16 -
(데이터베이스) Lost update와 serializable
트랜잭션에는 4가지 격리수준이 있습니다. read uncomittedread comittedrepeatable readserializable 그리고 각각의 트랜잭션은 다음과 같은 문제를 발생할 수 있습니다.dirty readnon-repeatable readphantom read(phantom read는 MVCC덕에 발생하지 않습니다.) 하지만 이와 별개로 serialiable을 제외한 트랜잭션 격리 레벨에서 발생할 수 있는 lost update 문제가 있습니다. Lost updateLost Update는 동시성 제어 문제 중 하나로, 두 개 이상의 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때 발생할 수 있습니다. 이는 하나의 트랜잭션이 수행한 업데이트가 다른 트랜잭션에 의해 덮어쓰여지는 상황을 말..
2024.07.14 -
당신의 Go 코드의 nil 체크가 실패하는 이유(feat. interface)
* 몇 개월 전, 회사에서 문제 해결을 위해서 리팩터링이 있었고, 그 과정에서 에러가 발생했었는데, 그 경험을 공유하고자 이 글을 작성합니다. 저에게 하루 약 120만 건 이상의 요청이 들어오는 서버에 관한 태스크가 주어졌습니다. 서버에 새로운 파이프라인을 추가했고, 이에 대해서 개발환경에서 모든 테스트를 마치고, 실제 운영환경에 배포했습니다. 무사 배포를 기원했지만, 배포하자마자 서버는 죽었다 살아나기를 반복했고, 이 때문에 바로 서버를 롤백했습니다. 저는 매우 의아했습니다. 에러가 발생한 지점의 코드를 저는 고친 것이 없었고, 해당 지점에서 원래 에러가 발생하고 있지 않았기 때문이죠. 그렇게 한 시간 동안 원인을 찾기 위해 로그를 열심히 찾았고, 결국 문제의 원인을 찾아냅니다. 문제 발생의..
2024.05.13 -
(회고)2023년 회고
올해는 무엇을 했고, 어떤 것을 얻었는지 나열함으로써 한 해를 돌아보려 합니다. 23년 역시 많은 일들이 있었고, 많이 성장했으며, 많은 어려움이 있었던 시간이었습니다. 2월, 길벗 출판사 멘토링 시작 우연히 예전에 활동했던 개발 동아리를 통해서 멘토링을 지원했고, 코딩 자율학습 멘토링을 하게 되었습니다. 게시판에 올라온 질문에 대해서 답변을 하고, 학습 가이드를 만들었어요. 많은 분들이 예전에 제가 똑같이 겪었던 시행착오를 겪고 있더라고요. 과거의 저를 도와주는 마음으로 열심히 답변을 달았습니다. 이때의 인연으로 지금까지 파이썬뿐만 아니라, C, HTML+JS, 스프링 부트까지 모두 멘토 및 튜터로 활동하고 있어요. 3월, 채널톡 입사 호감이 있었던 회사였는데, 우연히 채용공고를 보게 되었고 1월 말 ..
2023.12.29 -
(Spring) JpaRepository는 인터페이스인데 어떻게 동작할까?
Java의 인터페이스 Java의 인터페이스는 추상 메서드를 정의할 수 있습니다. public interface Person { void walk(); void run(); } 이제는 너무나 잘 아시겠지만, Java 8버전 이후로는 기본 메서드를 작성할 수 있습니다. public interface Person { void walk(); void run(); default void sayHello() { System.out.println("Hello"); } } 또한 인터페이스의 추상메서드를 사용하기 위해서는 반드시 구현이 필요합니다. 왜냐하면 껍데기만 제공해주는 '인터페이스'이기 때문이죠. public class User implements Person { void walk() { System.out.pr..
2023.08.31