학습일지(26)
-
벡터 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 -
확장에 유리한 아키텍처? 그러면, 인증정보는 어떻게 관리할까?
저번에 작성한 문서에 따르면, 확장에 유리한 아키텍처로 3-Tier를 선정했었다. 그렇가면, 어떤 계층이 가장 확장하기 쉬울까? 약간의 논란의 여지가 있겠지만, 가장 확장이 쉬우며, 확장을 필요로 하는 계층은 Application Layer라고 할 수 있겠다. 이유가 궁금하다면, 이 계층의 주 역할이 트랜잭션 처리라는 점에 주목하면, 어느정도 설명이 될 것 같다. 수 많은 클라이언트가 첫 번째 페이지의 상품목록을 조회하는 /api/item 이라는 GET 요청을 동시에 했을 때의 상황을 가정해보자. 애플리케이션 서버의 환경에 따라 다르겠지만, Spring의 경우, RDBMS로 Data Layer에 접근할 때, JDBC를 사용한다. 설정환경에 다르겠지만, 보편적으로는 Connection pool을 거쳐, 사..
2021.11.29 -
Web 서비스를 운영할 때, 알맞은 아키텍처는 무엇일까?
세상엔, 다양한 종류의 웹 서비스가 있고, 각 웹 서비스에는 자기만의 구조가 있을 수도 있고, 보편적인 구조를 사용할 수도 있다. 아니면, 그냥 작동하는 것에 의의를 두고, 만들어진 웹 서비스도 있을 것이다.(물론 개인적으로 이 구조는 피하고 싶다.) 이번 문서에서는 가장 보편적일 수 있는 구조에 대해 이야기해 볼 예정이다. Web 서비스 아키텍처 REST API 웹 API 설계를 위한 표준(강제되는 구조는 아니다.)으로 Java, Python, Go 등 다양한 언어로 참고할 수 있는 레퍼런스가 많다.(즉, 구현하기 쉽다.) Rest API는 서비스 개발을 위해선 가장 일반적인 접근 방법이 될 수 있다. HTTP 프로토콜 기반만 따르면 응용이 용이하다.(주로 JSON, 개인적으론 선호하진 않지만, 정말 ..
2021.11.28 -
프로젝트 인증로직 Description
인증 방식 Token Based Authentication 가장 보편적인 방식은 세션을 활용하여, 세션 ID를 쿠키에 저장하고, 쿠키의 세션 ID를 통해, 세션 서버에 인증 정보를 조회하여, 사용자의 요청을 검증하는 방식이라 할 수 있다. 하지만, 모바일 플랫폼(android 혹은 ios 기반 애플리케이션)의 비중이 증가하고 있는 상황에서, 여러 플랫폼을 받아들일 수 있는 api가 요구되는 경우가 많을거라 판단하여, 헤더에 토큰 키를 포함하여, 토큰 키를 통해 세션 서버에 인증정보를 조회하는 방식을 채택하였다. JWT와 다른점은? JWT의 경우, `Bearer *` 방식으로, 인증에 필요한 정보를 `Claim`에 포함하여, 인코딩 알고리즘을 적용하여 `sign` 하는 방식으로, 헤더에 포함하는 키 자체에..
2021.11.28 -
Redis #2 : Redis의 주요 구성요소
Index Redis Client Serializer CrudRepository RedisTemplate 1. Redis Client Redis와 Java 애플리케이션의 connection을 형성해주는 conector가 필요하다. 그 connector 역할을 해주는 Redis Client는 크게 두가지가 있다. Jedis Lettuce 1.1. Jedis Jedis는 예전에는 Java의 표준 Redis Client로 사용되었다. 하지만, thread-safe를 보장하지 않기 때문에, 멀티스레드 환경에서 리소스를 공유하는 기능을 사용하는데 큰 제약이 따르고, TPS 성능이 Lettuce에 비해 저조하고, CPU의 오버헤드가 높다. 하지만, Lettuce에 비해 좀 더 쉽게 사용할 수 있다. 그래서, 보통 ..
2021.11.25