본문 바로가기

👨‍💻 프로그래밍63

트랜잭션 격리수준 (Transaction Isolation)에 따른 데이터 불일치 현상 Trasnaction 격리수준을 왜 다르게 해야 할까? 성능 때문에 Transaction은 여러개의 작업을 하나의 작업으로 묶는 역할을 합니다. 흔히 ACID라고 줄여 부르는 특징을 가지고 있습니다. 애플리케이션이 복잡해 지면 Transaction이 길어지고, 자연스럽게 같은 데이터를 여러 Transaction이 써야 할 일이 생기게 됩니다. 직관적으로는 Transaction이 데이터를 사용중이면 다른 Transaction은 사용할 수 없도록 Lock을 걸면 되지만 그렇게 하면 데이터가 필요한 다른 모든 Transaction이 그 시간동안 대기해야 합니다. 그래서 한 Transaction이 데이터를 사용중일때, 다른 Transaction이 어떻게 처리할지에 관한 전략을 격리수준 (Isolation Lev.. 2023. 7. 18.
Git 파일의 Life Cycle 이해하기 Git을 사용한지는 오래됐지만, Git을 엄밀히 공부하고 사용한 것은 아니였습니다. 그러던 와중 Git에 대한 이해 부족으로 협업 과정에서 문제를 몇 번 겪게 된 뒤로 Git을 이해하고 사용해야 겠다고 결심해 첫 단계로 Git으로 관리되는 파일들의 Life Cycle를 공부했습니다. Untracked -> Tracked Git으로 한 번도 관리되지 않은 상태의 파일은 Untracked 상태에 놓여 있습니다. 1번이라도 add, commit을 하면 Tracked 상태가 됩니다. git add를 하면 생기는 일 .git 내부에는 2가지의 영역이 있습니다. Staging Area와 Repository 입니다. git add를 하면 파일이 Staging Area로 이동됩니다. 여러개의 파일 혹은 파일의 일부분을.. 2023. 6. 29.
Spring에서 같은 type의 Bean 구분하는 방법 Spring의 가장 핵심적인 기능은 객체의 수명주기를 개발자가 관리하지 않고 Spring에서 관리해 주는 겁니다. 보통 이를 제어의 역전 (IoC)이라고 부르는데요. 객체의 수명주기를 개발자가 제어하던게 역전되서, Spring에서 관리해 준다는 의미입니다. Spring에서 관리되는 객체를 Bean이라고 부릅니다. 일반적으로 객체를 쓸 때와 같이, Spring의 Bean도 같은 타입의 Bean이 여러개 있을 수 있습니다. 스프링에서 이 Bean들을 어떻게 구분하고, 적절한 Bean을 어떻게 가져다 쓸 수 있는지 정리했습니다. @Qualifier @Configuration public class ObjectMapperConfig { @Bean public ObjectMapper mapper1() { retu.. 2023. 6. 6.
👜 Apple Wallet Pass, Spring Boot에서 개발하기 기본적인 구조 모르는 분야의 개발을 시작할 때 가장 먼저 해야 할 일은 공식 문서를 보는 것이라고 생각합니다. 그래서 저도 애플의 공식 문서를 참고해 우선 Apple Wallet의 기본적인 구조를 이해해 보려고 했습니다. 우선, .pkpass라는 파일을 아이폰, 맥북, 아이패드 등의 애플 기기에서 열면 Apple Wallet에 Pass가 추가됩니다. .pkpass는 폴더를 압축한 파일이라고 생각하면 되고, 그 폴더의 구조는 아래와 같습니다. 보시면, 핵심적인건 3가지 입니다. 리소스 파일 (icon, thumbnail, logo 등 이미지) 설정 파일 (pass.json) 리소스 파일, 설정 파일의 번역본 (영어, 한국어 등) 즉, Apple Wallet Pass를 개발하는 방법은 위 3가지를 준비하고,.. 2023. 6. 2.
특정 거리 범위 내 위도/경도 계산하기 (의외로 어려움) 해야 하는 것 현재 위치를 기준으로 특정 거리 내의 위도/경도 범위를 계산 Java의 Method Signature로 따지면 아래와 같습니다. public double[] getLatitudeRange(double latitude, int radiusInMeters) {} public double[] getLongitudeRange(double latitude, double longitude, int radiusInMeters) {} 우선 위도 / 경도에 대해 알아보자 우선, 위도 / 경도는 단순히 지구의 x / y 좌표가 아닙니다. 위도 / 경도는 각도입니다. 지구를 선으로 나누고, 그 선을 기준으로 몇 도 떨어져 있는지를 측정합니다. 위도는 적도에서 몇 도 떨어져 있느냐를 측정합니다. 적도는 지구의 .. 2023. 5. 27.
CSS를 조금 더 우아하게 쓰기 위한 최소한의 SASS SasS, 그게 우리 프로젝트에 도움이 됩니까? 사실, 간단한 프로젝트는 굳이 SaaS를 쓸 필요는 없다고 생각합니다. Bootstrap, Tailwind 같은 CSS Library를 쓰는게 오히려 디자인적으로도 개발적으로도 편리한거 같아요. 하지만! 조금만 디자인을 신경쓰기 시작해도 필연적으로 CSS를 사용해야 하고 CSS를 사용하는건 (개인적으로 느끼기에) 상당히 불편하고 암걸리는 경험입니다. 이런 CSS를 개선시켜 주는게 SasS입니다. 도움이 되는 유용한 Sass 기능 변수 Nesting Mixins 상속 (Inheritance) Partials Operators if-else Sass를 React에서 사용하기 위해서는? Sass는 브라우저가 이해할 수 없는 파일이기 때문에 보통의 CSS로 변환시.. 2023. 5. 26.
🔥 Hot Ranking 알고리즘, Spring Batch로 구현하기 (feat. Strategy 패턴) Hot Ranking 알고리즘이란? 인기있는 것 (Hot한 것)에 순위(Ranking)을 매기는 알고리즘 실시간 검색어, 커뮤니티의 인기 게시글, 화제가 되고 있는 뉴스 등 무언가에 특정한 기준으로 순위를 매기고 싶을 때 쓰는 알고리즘을 Hot Ranking 알고리즘이라고 부릅니다. 보통은 공개되어 있지 않고, 다양한 데이터를 바탕으로 계속 개선합니다. 책잇아웃(포트폴리오)을 만드는 도중, 커뮤니티 기능을 만들게 됐는데 게시글을 인기순으로 보여 주고 싶어 Hot Ranking 알고리즘을 고안해 봤습니다. 나만의 Hot Ranking 알고리즘 우선, 커뮤니티 부분의 DB 구조만 잠깐 보여 드리자면 아래같이 되어 있습니다. 즉, 게시글을 평가할 때 게시글 자체, 게시글의 좋아요/싫어요, 댓글, 댓글의 좋아요.. 2023. 5. 18.
깃허브 코파일럿 (Github Copilot) 1달 사용 후기 소개 최근 끝없이 화제가 되고 있는 ChatGPT 보다 전에, Github Copilot이라는 IDE에서 코딩을 도와주는 프로그램이 있습니다. GitHub Copilot · Your AI pair programmer GitHub Copilot works alongside you directly in your editor, suggesting whole lines or entire functions for you. github.com ChatGPT는 직접 내가 물어봐야 하지만, Github Copilot은 프로젝트 내에서 내 코드를 학습하고 코드를 칠 때 아래와 같이 자동으로 제안해 줍니다. 여기서 Tab 한 번만 누르면 바로 제안된 코드를 사용할 수 있습니다. 최대한 객관적으로, 현재 상황 기준 프로그래.. 2023. 5. 17.
Spring Cloud Config로 Config 서버 구성하기 Spring Cloud Cloud란? Spring에서는 흔히 설정과 관련된 정보를 application.properties나 application.yml에서 관리합니다. 설정에는 API Secret이나 암호키 같은 민감한 정보가 있을 수 있기 때문에 보통 환경변수나 jar 실행 시의 argument로 이런 값을 받게 해서 유출을 방지합니다. 하지만 이런 방식은 같은 instance 여러개가 다른 시간에 배포되는 MSA 같은 환경에서는 관리가 너무 어려워 비현실적입니다. 이를 해결하기 위한게 Spring Cloud Config입니다. Spring Cloud Config를 쓰면... Backend(Git, Vault 등)에서 설정 파일들을 버전 관리 가능 instance의 재시작 없이 주기적으로 새로운 설정.. 2023. 5. 2.