본문 바로가기

분류 전체보기85

항해플러스 2주차 후기 이번 챕터를 시작하며 꼭 해내고 싶었던 목표과제 제 시간안에 끝나고 통과하는 것이 목표였습니다.이번 챕터를 마무리하며 가장 기억에 남는 성취애플리케이션을 만들때 사용되는 다양한 아키텍처 종류에 대해 공부하고 각 아키텍처별 특성에 대해 학습할 수 있어 좋았습니다. 결국 모든 아키텍처는 각자의 장단점이 있고 정답인 아키텍처는 없다는 것을 많이 느낄 수 있었던 것 같습니다.DB Lock에 대해 많이 학습할 시간이었던 것 같습니다.비관적락과 낙관적락의 차이와 어떤 시점에 어떤 방법을 선택해야하는지에 대해 고민할 수 있었던 시간이었던 것 같습니다.이번 과제에서는 특강이라는 도메인이 었기 때문에 실패가 자주 발생할 것으로 예상하여 비관적락을 통해 X-LOCK을 걸었습니다.테스트 코드를 템플릿화 시켜 중복코드를 최소.. 2024. 10. 5.
항해플러스 1주차 후기 1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제) 인메모리로 데이터를 저장할 때 어떻게 동시성을 관리할 것인지에 대해 고민을 많이했던 것 같습니다. 외부 리소스를 사용하지 않고 순수하게 애플리케이션 내부에서만 동작하는 코드를 짜는 경우가 많이 없다보니 어떤 방식으로 짜야 효율적인가에 대해 많은 고민을 한 것 같습니다. 2. 시도 Syncronized 키워드와 ReentrantLock을 이용해서 Lock을 제어했습니다. Syncronized 키워드는 간단하게 Lock을 걸고 알아서 해제해주기 때문에 편리하다고 느꼈습니다.ReentrantLock은 직접 Lock을 건 후 직접 해제하는 로직을 추가하기 때문에 좀 더 번거롭다고 생각했지만 타임아웃 같은 기능을 통해 데드락을 방지할 수 있는 요소.. 2024. 9. 28.
스프링에서 어떻게 캐싱이 이루어질까? - 1편 스프링에서 캐싱 사용하기 캐싱을 사용하면 자주 읽는 데이터에 대해 I/O 작업을 최소화하여 성능을 크게 개선할 수 있습니다.스프링에서는 캐싱을 적용하기 위해 스프링 3.1 버전부터 캐시 추상화를 지원합니다.캐시 추상화를 통해 애플리케이션에 캐싱을 적용하기 위해 캐싱의 세부 구현 사항에 대해 신경쓰지 않아도 됩니다.💡 공식 문서에서는 이에 대해 캐싱을 투명하게 제공한다라고 표현하고 있는데 투명하다는 의미는 개발자가 애플리케이션에서 사용하기 위해 세부 구현을 알 필요없이 간단한 선언만으로 사용할 수 있게 해줌을 의미합니다.  이를 코드로 살펴보면 다음과 같이 @EnableCaching, @Cacheable 어노테이션을 추가한것만으로 캐싱이 적용되게 됩니다.@Configuration@EnableCachingclass CacheCon.. 2024. 8. 4.
DOM(Document Object Model) DOM(Document Object Model, 문서 객체 모델)이란? 💡 DOM이란 HTML, XML와 같은 문서의 프로그래밍 인터페이스입니다. DOM은 문서의 구조화된 표현(structured representation)을 제공하며 프로그래밍 언어가 DOM 구조에 접근할 수 있는 방법을 제공하여 그들이 문서 구조, 스타일, 내용 등을 변경할 수 있도록 돕습니다. 위의 설명은 MDN 공식 문서에서 DOM에 대해 설명하고 있는 문장입니다. 즉, 웹 문서를 구조화된 방식으로 표현하여 프로그래밍 언어를 이용하여 문서 구조, 스타일 및 내용에 접근할 수 있도록 하는 인터페이스를 제공하는 것을 DOM 이라고 합니다. DOM의 구조 DOM은 트리 구조로 표현되며, 각 노드는 문서의 일부를 나타내게 됩니다. 예를 .. 2023. 8. 14.
모니터 화면 상단에 Profile이라는 글씨가 보이는 문제 문제 Mac Mini (M1)을 구매하고 나서 다음과 같이 모니터에 Profile이라는 글씨가 생기는 증상이 있었습니다. 검색해도 해당 정보가 나오지 않아 그냥 그러려니 하고 쓰자라고 생각했다가 해당 증상이 3초간격을 계속 나오고 해당 영역은 클릭이 안되어 굉장히 스트레스를 받았었습니다.. 😢 해결 과정 애플 고객센터에 문의해보니 다양한 해결 방법을 이야기 해주었고 다음과 같은 방법들을 제시해주었습니다. 애플 복구모드로 부팅 (꺼진 상태에서 전원 누르고 땐 후 전원 꾹누르면 진입됨) 후 다시 확인 복구모드로 들어가는 것만으로도 어느정도 복구가 된다고 함 모니터 선 제거후 다시 연결 nvram 초기화 (m1 모델의 경우 재부팅시 초기화) 사용자 다시만들고 해당 사용자로 로그인 해당 방식으로 사용했을 때 P.. 2022. 12. 17.
스프링 부트 3.0 이상에서 QueryDSL 설정 김영한님의 실전! QueryDSL 강의를 보던 도중 QueryDSL이 다음과 같이 QueryDSL 컴파일 시도시 예외를 발생하는 것을 볼 수 있었습니다. java.lang.NoClassDefFoundError: javax/persistence/Entity 현재 스프링 부트 3.0을 사용하고 있었고 querydsl 의존성을 다음과 같이 변경하였습니다. plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' conf.. 2022. 12. 3.
동작 파라미터화를 통해 코드 전달하기 동작 파라미터화 란? 동작 파라미터화는 아직 어떻게 실행될지 정해지지 않은 코드 블록을 의미합니다. 해당 코드 블록은 전달한 곳에서 필요시에 호출하기 때문에 실행이 뒤로 미루어지게 됩니다. 왜 실행 방법이 정해지지 않은 코드 블록이 필요하고 어떠한 장점을 가지는지 다음 예제를 통해 알아봅시다. 예를 들어, 사과 농장을 운영하고 싶다고 가정해봅시다. 현재, 수확한 사과 중 녹색사과만 걸러내서 확인하고 싶을 경우 다음과 같이 코드를 작성할 수 있을 것입니다. public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple : inventory) { if (GREEN.equals(apple... 2022. 11. 2.
DBMS의 실행계획 확인하기 DBMS는 실행계획을 통해 데이터 접근을 수행하게 됩니다. 실행계획은 옵티마이저를 통해 최적화 된 명령을 수행하게 되지만 데이터 양이 많은 테이블에 접근하거나 복잡한 SQL 구문을 실행하면 반응 지연이 발생할 수 있습니다. 이는 옵티마이저에 전달된 통계 정보가 부족한 상태라 제대로 실행 계획을 세우지 못했을 수 있지만, 가장 최신의 충분한 통계정보를 전달 받았다 하더라도 느릴 수 있습니다. 예를들어 통계정보가 최신이라도 SQL 구문자체가 복잡한 상황이거나 잘못된 인덱스 사용 등으로 인해 잘못 된 계획을 세울 수 있습니다. 이런 상황이 발생할 경우 실행계획을 살펴보고 해결방안을 찾아야 합니다. 실행계획 확인방법 다음과 같이 DBMS는 실행 계획을 확인할 수 있는 명령을 제공하고 있습니다. Oracle과 M.. 2022. 10. 23.