분류 전체보기(67)
-
멀티 프로세스/스레드 환경에서 동기화를 위한 여러 전략과 차이
동기화의 전략의 구체적인 동작 방식은 OS와 프로그래밍 언어에 따라 차이가 있을 수 있으니, 한번 개념을 정리했어도, 꼭 관련 문서를 통해 검토하는 습관을 가져야 한다. 동기화란? 여러 프로세스/스레드가 동시에 공유 데이터를 실행, 조작을 해도, 공유 데이터의 일관성을 유지하는 것. 동기화가 필요한 이유 여러 프로세스 혹은 스레드가 동시에 같은 데이터를 조작할 때, 각각의 타이밍, 순서에 따라 결과가 달라질 수 있는 상황(경쟁 조건 발생)이 발생하는데, 이 상황에서 공유 데이터의 일관성을 보장하기 위해선 하나의 프로세스/스레드만 진입해서 실행 가능한 영역(임계 영역)을 구분하고 통제해야할 필요가 있다. 즉, 요약하자면, 경쟁 조건 속에서 임계 영역을 구분하여 상호배제(mutual exclution)를 보..
2022.01.19 -
작업 일지#9 테스트 개선 -2-
개요 저번 일지에서는 테스트의 종류를 살펴보았다. 이번 일지에서는 기존의 테스트 코드를 살펴보고, 그 테스트 코드의 문제점을 파악하고, 개선하는 작업을 기록해보겠다. 분석 우선 현재 작성된 테스트 코드부터 살펴보자. @SpringBootTest @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class ItemRestControllerTest { @Autowired private MockMvc mockMvc; @Autowired private ObjectMapper objectMapper; @Autowired private ItemService itemService; @Autowired private CategoryService categoryService..
2021.12.23 -
벡터 in Java
얼마전에, 한 기업의 입사 코딩 테스트를 보았다. 결론부터 이야기하자면, 기하학적, 이차함수에 대해 학습을 소홀히 하였고, 덕분에 시원하게 말아먹었다. 문제내용은, 법적인 이슈로 공개할 순 없다. 다만 해당 문제를 풀기 위해선, 기하학적 지식, 그리고, 기하학에서 벡터의 개념과 활용, 그리고, 삼각함수에 대한 지식과 그걸 코드로 자유롭게 표시할 능력이 있어야 했다. 비록 시험은 아쉽게 되었지만, 기본기에 대해 구체적으로 부족한 부분을 깨닫고, 매너리즘에 빠질 무렵에 아주 제대로 동기부여를 한 것 같다. 이번 문서를 통해, 삼각함수와 벡터에 대한 개념을 짚어보고, 여러가지 간단한 상황을 제시하여, 코드로 풀어보는 시간을 가져보겠다. 용어 벡터 (vector) 위키피디아의 내용을 따르면, 분야에 따라 매우 ..
2021.12.19 -
Event Driven Programming?
개요 Redis의 주요 구성요소를 정리하고 학습하던 중, 낯설은 단어를 발견하였다. Lettuce를 소개하는 문구에서 나온 Netty라는 네트워크 애플리케이션이었다. 해당 깃헙을 살펴 보았는데, event-driven이라는 단어가 있었다. 대체 이 단어는 무엇을 의미하는 걸까? 이번 게시글에서는 이 단어에 대해 학습한 내용을 정리해보겠다. Event-Driven? 위키피디아의 내용을 인용해보자. The term event-driven refers to a methodology that focuses on events and event dependencies. 요컨대, event에 집중하는 개발 방법론인 듯 하다. 해당 링크를 살펴보면 알겠지만, Event-Driven에서 파생된 단어가 많다. 즉, 상대적..
2021.12.10 -
작업 일지#8 테스트 개선 -1-
개요 그동안, 프로젝트를 진행하면서, 테스트는 그저 서비스 로직이 스프링 컨테이너 안에서 제대로 작동하고 있는지를 확인하는 수단으로 생각했다. 물론, 테스트 코드가 많으면 많을수록, 서비스 로직의 안정성을 보장하는 안전장치가 더 탄탄해진다는 뜻이기도 하니, 작업자의 심신을 안정시키는 데에는 큰 기여를 해준다고 볼 수 있다. 하지만 한가지 문제가 발생했다. 바로 빌드시간이 증가하고 있다는 것이다. 이번 게시글에서는 이 빌드 시간이 증가하고 있는 원인을 찾고, 개선하는 과정을 정리하고자 한다. INDEX 현상 파악 원인 파악 테스트의 종류와 툴의 종류 현상파악 우선 가장 먼저해야할 내가 인식한 문제가 정말로 발생하고 있는 문제인지를 검증해야한다. 검증하는 방법들 중 가장 간단한 방법으로는 빌드 기록을 살펴보..
2021.12.09 -
확장에 유리한 아키텍처? 그러면, 인증정보는 어떻게 관리할까?
저번에 작성한 문서에 따르면, 확장에 유리한 아키텍처로 3-Tier를 선정했었다. 그렇가면, 어떤 계층이 가장 확장하기 쉬울까? 약간의 논란의 여지가 있겠지만, 가장 확장이 쉬우며, 확장을 필요로 하는 계층은 Application Layer라고 할 수 있겠다. 이유가 궁금하다면, 이 계층의 주 역할이 트랜잭션 처리라는 점에 주목하면, 어느정도 설명이 될 것 같다. 수 많은 클라이언트가 첫 번째 페이지의 상품목록을 조회하는 /api/item 이라는 GET 요청을 동시에 했을 때의 상황을 가정해보자. 애플리케이션 서버의 환경에 따라 다르겠지만, Spring의 경우, RDBMS로 Data Layer에 접근할 때, JDBC를 사용한다. 설정환경에 다르겠지만, 보편적으로는 Connection pool을 거쳐, 사..
2021.11.29