Loading...
2023. 1. 15. 16:27

[Netty] Netty로 배워보는 Non-blocking I/O 기초

오늘은 Java 네트워크 프로그래밍의 꽃인 Netty에 대해 알아보겠습니다. What is Netty ? Netty를 들어보신 분들이라면 아마 한 번 쯤 c10k 문제라는 것을 경험해보셨거나 관심을 가졌을만한 분이실 것 같습니다. Netty는 JVM에서 사용할 수 있는 Java NIO 기반의 Non-blocking 프레임워크입니다. 어느 특정 프로토콜(HTTP 등)의 서버를 구현하는 것이 아닌 TCP, UDP의 네트워크 통신을 Non-blocking I/O로 처리하여 서버와 클라이언트를 개발하는 프레임워크입니다. Non-blocking이 무엇인가요? 간단하게 설명하자면, 어떠한 작업을 막힘없이 이어나갈 수 있도록 하는 것입니다. 간단한 예시를 들어보자면 우리가 맛있는 맛집에가서 음식을 먹으러 갔습니다. ..

2022. 11. 6. 21:49

[Spring] 비동기 작업과 모니터링을 위한 TaskExecutor, TaskScheduler 기본

Spring Framework는 TaskExecutor 인터페이스와 TaskScheduler 인터페이스로 Task(작업)의 비동기 실행과 스케줄링에 대한 추상화 인터페이스를 제공합니다. 이런 것이 필요한 이유는 무엇일까요? 기본적으로 Spring은 Multi-Thread 방식을 사용하며 Singleton Pattern을 이용해 모든 Bean들을 공유하여 사용합니다. 하지만 이는 기본적으로 API를 호출하는 과정을 Blocking하지 않고 다중 사용자가 요청을 받을 수 있도록 처리한다는 뜻입니다. 따라서 우리가 API 호출 이후 Bean 내 어떤 특정 작업에 대한 비동기 실행은 보장되지 않습니다. TaskExecutor TaskExecutor는 Spring 2.0에서 등장한 비동기 실행 추상화 인터페이스로..

2022. 10. 30. 16:57

[Rust] 개념부터 개발 환경 구축까지 차근차근 시작해보기

요즘 모던 프로그래밍 언어가 많이 나오고 있습니다. 구글의 Golang, 모질라의 Rust 뿐만 아니라 함수형 프로그래밍 언어인 Clojure, Rescript 등 다양한 언어가 많이 나오고 있는데요. 특히 최근에는 구글에서 C++ 대항 언어로 Carbon이라는 언어까지도 나왔습니다. 이번에 다룰 주제는 바로 모질라의 Rust인데요. 최근 리눅스 커널 개발에도 Rust 언어가 공식 채택되어 화두가 되고 있는 Rust에 대해 알아보도록 하겠습니다. What is Rust? 제가 처음 Rust 언어를 들었을 때는 3년 전, YouTube의 케빈님 방송에서였습니다. 그 때부터 쭈욱 아무것도 해오지 않았었습니다만 Golang과 Rust 둘 중 엄청 저울질을 했었기 때문이었죠. 하지만 이제는 자신있게 Rust 언..

2022. 10. 29. 22:07

[Spring] Spring Advisor와 Pointcut - 실전편

이전 글에서 DefaultPointcutAdvisor와 다양한 Pointcut들에 대한 개념을 다뤄봤습니다. 2022.10.10 - [Programming/Spring] - [Spring] Spring Advisor와 Pointcut - 개념편 [Spring] Spring Advisor와 Pointcut - 개념편 Spring AOP 컴포넌트를 이용해 Advice를 만들어 메서드의 전후처리를 프록시 객체를 통해 구현해봤습니다. 2022.05.16 - [Programming/Spring] - [Spring] Spring Advice로 커스텀 어드바이스 만들기 [Spring] Spr.. blog.neonkid.xyz Pointcut은 인터페이스 형태로 되어 있지만 Spring AOP에서 이미 많은 구현체들이..

2022. 10. 10. 19:11

[Spring] Spring Advisor와 Pointcut - 개념편

Spring AOP 컴포넌트를 이용해 Advice를 만들어 메서드의 전후처리를 프록시 객체를 통해 구현해봤습니다. 2022.05.16 - [Programming/Spring] - [Spring] Spring Advice로 커스텀 어드바이스 만들기 [Spring] Spring Advice로 커스텀 어드바이스 만들기 이번 포스트부터는 Spring AOP 컴포넌트를 이용하여 실제 Advice를 만들어보고, 위빙하는 시간을 가져보겠습니다. Advice Interface Advice에 대해 다시 복습해보자면 Advice는 특정 조인포인트 즉, 메서드가 blog.neonkid.xyz Spring AOP의 ProxyFactory 클래스는 우리가 작성한 메서드에서 AOP 프록시 인스턴스를 얻고 구성하는 간단한 방법을 ..

2022. 7. 2. 15:21

[OpenCV] 원하는 이미지 영역(관심영역, ROI) 자르기(Crop)

블로그 글을 쓰다보면 특정 영역만을 잘라서 저장하고 싶을 때가 있습니다. 윈도를 사용하다보면 윈도에서 제공하는 Windows 사진 뷰어 등의 프로그램을 이용해 원하는 이미지의 영역을 자를 수 있는데, Mac OS X나 Ubuntu에 있다보면 기본 프로그램으로 이런 것들을 제공하지 않다보니 쓸 프로그램을 찾게 되는 경우가 잦았는데요. 이렇게 원하는 이미지를 불러와서 간단하게 원하는 영역을 자를 수 있는 프로그램을 한 번 만들어보도록 하겠습니다. MouseEvent OpenCV에서 MouseEvent를 사용하기 위해서는 콜백 함수를 구현해야 합니다. 콜백 함수에 대해 잘 모르시겠다면 아래의 글을 참고해보세요. 2016.12.18 - [Programming/OpenCV] - OpenCV에서 Mouse Even..

2022. 7. 2. 14:02

[OpenCV] C++와 OpenCV 4.x로 개발할 수 있는 환경 만들기

간만에 OpenCV 글을 작성하게 되었습니다. 요 몇년 백엔드 엔지니어링 공부를 하게 되면서 장난감처럼 여겨오던 OpenCV 글을 다시 쓰게 되었는데요. 안 본 사이에 벌써 OpenCV 4.6 Pre-release로 OpenCV 5.x 버전까지 올라온 것을 보고 정말 시간이 빨리 흘러가고 있다는 것을 새삼 느꼈습니다. 만들 환경 오늘은 아래의 3가지 도구를 사용해서 OpenCV 개발 환경을 만들어보도록 하겠습니다. JetBrains CLion / CMake OpenCV 4.6 Ubuntu Linux 20.04 사실 OpenCV를 사용할 수 있는 환경은 C++ 외에도 Python이 있는데요. 딥러닝이나 머신러닝을 주로 하시는 분들은 Python을 이용할 것이고, 그 외 IoT나 카메라 등 하드웨어를 주로 ..

2022. 6. 26. 15:50

[Spring] OSIV로 알아보는 Spring Transaction 헤짚기

Spring boot에는 spring.jpa.open-in-view라고 하는 옵션이 있습니다. 이 옵션은 JPA의 OSIV 기능을 ON/OFF 할 수 있는 옵션인데요. 이 옵션이 무엇인지 알아보도록 하겠습니다. OSIV 먼저 이 옵션은 JPA의 OSIV 기능의 사용 유무를 나타내는데, OSIV란, 영속성 컨텍스트를 View까지 열어두는 기능입니다. 영속성 컨텍스트가 무엇인지 잘 모르시겠다면 아래 글을 참고해보세요. 2020.06.23 - [Programming/Spring] - [Spring] JPA의 영속성 컨텍스트와 생명주기 [Spring] JPA의 영속성 컨텍스트와 생명주기 Spring Framework를 이용하여 웹 애플리케이션이나 서버 애플리케이션을 개발할 때 사용하는 DB 라이브러리가 있습니다..

2022. 6. 22. 21:33

[Programming] SOLID - 객체 지향 5대 설계 원칙

이번 포스트에서는 특정 언어에 대한 학습이 아닌 프로그래밍 스킬에 대해 적어보고자 합니다. 독자 여러분들 중 Java, C#, Python과 같은 객체 지향 프로그래밍 언어를 사용하시고 계신다면 OOP(객체 지향 프로그래밍)이라는 단어를 쉽게 접해보셨을 것입니다. OOP (Object Oriented Programming) OOP는 우리 말로 객체 지향 프로그래밍이라는 뜻입니다. 이 객체 지향 프로그래밍을 위키에서 보면 아래와 같습니다. 객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org 쉽게 얘기하자면 우리가 C 언어로 작성되었던 명령 형식의 절차 지향 프로그래밍과는 달리 OOP는 객체라는 독립된 단위로 프로그램을 형성시키는 스킬입니다. 절차 지향 프로그래밍에서 '절..

2022. 5. 29. 18:18

[Algorithm] - 2022 카카오 신입 1차 온라인 코딩 테스트 (Kakao Newbie Primary Online Coding Test) for Tech developers 문제 풀이

매년 이뤄지는 카카오 신입 온라인 코딩 테스트 문제 풀이를 또 적게 되었네요. 회사 업무를 좀 더 신경써야 하다보니 마냥 푸는 것을 미뤄놓고만 있다 이제서야 문제 풀이를 진행하게 되었습니다. 이번에도 먼저 문제 풀이 전 후기를 잠깐 말씀드리자면 작년 문제에 비하여 난이도가 많이 개선된 모습이었습니다. 작년과 달리 Lv 4 문제는 출제 되지 않았고, 구현 중심의 앞 문제와 좀 더 실력을 보기 위한 Lv 3 난이도 문제 1~2문제로 추려진 모습이었습니다. 그럼 문제 풀이를 진행해보겠습니다. Question 01. 신고 결과 받기 문제 원문: (https://programmers.co.kr/learn/courses/30/lessons/92334) 신입사원 무지는 게시판의 불량 이용자를 신고하고 처리 결과를 메..

2022. 5. 22. 21:13

[FastAPI] 16. Pulumi를 이용해 FastAPI Serverless 환경 구축해보기

우리는 지난 글에서 FastAPI, Magnum, AWS Serverless Stack(Lambda, API Gateway)을 이용하여 FastAPI 서버리스 환경을 구축했습니다. 2022.05.22 - [Programming/Python] - [FastAPI] 15. FastAPI를 Serverless로 배포하는 방법 - Mangum [FastAPI] 15. FastAPI를 Serverless로 배포하는 방법 - Mangum 이번 포스트에서는 FastAPI와 Serverless(서버리스) 조합에 대해 알아보도록 하겠습니다. 제가 초기 서버리스를 배웠을 때는 AWS의 Lambda라는 서비스가 나왔을 때였는데요. 당시 사용할 때는 별도의 프 blog.neonkid.xyz 하지만 AWS Lambda와 API..

2022. 5. 22. 00:03

[FastAPI] 15. FastAPI를 Serverless로 배포하는 방법 - Mangum

이번 포스트에서는 FastAPI와 Serverless(서버리스) 조합에 대해 알아보도록 하겠습니다. 제가 초기 서버리스를 배웠을 때는 AWS의 Lambda라는 서비스가 나왔을 때였는데요. 당시 사용할 때는 별도의 프레임워크 필요없이 함수의 구현만으로 API 서비스를 만들 수 있는 Cloud Native(클라우드 네이티브) 개발 모델이었습니다. Serverless Serverless(서버리스)라는 단어를 일반적으로 해석하면 '서버 없는 애플리케이션', '서버 없는 서비스'라는 뜻이 됩니다. 하지만 실제로 서버리스는 서버 없이 서비스를 운영하거나 애플리케이션을 배포하는 것은 아닙니다. 실제 서버리스는 개발자가 별도로 서버 관리라는 비용없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 개발 모델로써 대표적으..

2022. 5. 16. 22:06

[Spring] Spring Advice로 커스텀 어드바이스 만들기

이번 포스트부터는 Spring AOP 컴포넌트를 이용하여 실제 Advice를 만들어보고, 위빙하는 시간을 가져보겠습니다. Advice Interface Advice에 대해 다시 복습해보자면 Advice는 특정 조인포인트 즉, 메서드가 호출되는 시점에 실행할 코드를 정의한 것입니다. ProxyFactory 클래스에서 addAdvice 메서드를 이용해 어드바이스를 직접 추가하는 방법과 Advisor 구현체를 addAdvice에 전달하여 간접적으로 추가하는 방법이 있었죠. 두 방법에 차이가 있다면 어드바이스와 달리 Advisor는 관련 PointCut과 함께 어드바이스를 전달한다는 점이 있습니다. PointCut은 실제 어드바이스를 언제 실행할지를 정하는 AOP 용어로 어드바이스를 실행할 지점을 상세하게 지정..

2022. 5. 15. 22:37

[Spring] Spring AOP - Spring에서는 AOP를 어떻게 이용할까?

앞서 우리는 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)에 대한 기본과 개념에 대해 알아봤습니다. 만약 읽어보지 못했다면 이 글을 읽기 전 반드시 읽어보시길 권장드립니다. 2022.05.14 - [Programming/Spring] - [Spring] AOP (Aspect-Oriented Programming) 기본과 개념 [Spring] AOP (Aspect-Oriented Programming) 기본과 개념 Spring에는 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)이라는 핵심 기능을 제공합니다. 음? OOP(객체 지향 프로그래밍)라는 것은 들어봤는데, AOP는 무엇일까요? AOP vs OOP ? 관점 지향 프로그래밍 blog..

2022. 5. 14. 20:21

[Spring] AOP (Aspect-Oriented Programming) 기본과 개념

Spring에는 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)이라는 핵심 기능을 제공합니다. 음? OOP(객체 지향 프로그래밍)라는 것은 들어봤는데, AOP는 무엇일까요? AOP vs OOP ? 관점 지향 프로그래밍(AOP)은 애플리케이션에서 코드가 중복되고 강력하게 결합되어 다른 로직과 분리할 수 없는 애플리케이션 로직들을 별도의 관심사로 분리하여 모듈회 하는 프로그래밍 방법입니다. 우리는 보통 이러한 로직을 만났을 때 코드를 복제하여 의존성을 만들게 되는데, AOP는 이러한 의존성 없이도 동작하게 해줍니다. 대표적으로 logging 코드들이 여기에 해당합니다. 그렇다면 AOP와 OOP는 서로 경쟁하는 관계인가요? 그것은 아닙니다. 왜냐하면 우리는 OOP만을 가지고 ..

2022. 5. 5. 20:30

[Spring Data] @Transactional 어노테이션으로 보는 Spring의 트랜잭션 이야기

Spring을 한 번 쯤 사용해보셨다면 Transactional 어노테이션에 대해 알고계실 것입니다. 그런데 무작정 썼을 땐 DB랑 연결하고 객체 데이터를 영속할 때 이거 쓰면 돼. 라고 생각하시는 분들이 계셨을 것입니다. 하지만 실제로 이 어노테이션을 사용했을 때와 그렇지 않았을 때 왜 이런 차이가 발생하는지에 대해 한 번 쯤 궁금증을 가져보신 분들이 계신다면 이 글을 차분히 읽어 보셨으면 좋겠습니다. Transaction 트랜잭션에 대해서는 다른 글에서도 충분히 언급되어 있는 내용이지만 여기서 한 번 더 설명을 드리면, 데이터베이스의 트랜잭션을 이야기하며 DBMS 혹은 그 유사한 시스템에서 발생하는 연산들의 상호작용 단위입니다. 좀 더 쉽게 설명을 해보면, 우리는 데이터 하나를 영속하거나 변경하기 위..

2022. 4. 24. 17:49

[FastAPI] 14. SQLAlchemy의 One-to-Many, Many-to-Many, Self referential relationship

지난 포스트에서는 단순 Column 데이터와 그리고, 단일 외래키 하나의 관계 데이터를 Pydantic으로 매핑하여 Serialize/Deserialize 하는 것에 대해 알아봤습니다. 이번 포스트에서는 Many-to-Many, One-to-Many 형태의 Foreign Key가 걸려 있는 관계형 데이터를 Join해서 가져올 떄 어떻게 Pydantic 모델과 매핑할 수 있는지에 대해 알아보겠습니다. DB에서 단순하게 접근 지난 포스트에서 사용한 ERD를 그대로 사용해보겠습니다. Category와 Post가 있고, Post는 category_id를 외래키로 사용하고 있습니다. 따라서 카테고리의 데이터를 category 테이블이 가지고 있는건데, 우리가 이 정보를 모두 데이터베이스로 가져오려면 어떻게 해야 ..

2022. 4. 16. 18:06

[Algorithm] 1일 1알고리즘으로 1일 1커밋에 도전하기

코딩테스트를 준비하고 계시거나, 알고리즘 대회를 준비하고 계시는 분들이라면 1일 1알고리즘에 대해 어색하지 않을 것입니다. 그런데, 1일 1커밋을 도전하시는 분들이라면, 나는 오늘 무엇으로 커밋을 해야할까? 라는 고민을 하시게 될텐데요. 매일 알고리즘 풀이는 어렵더라도 가끔 오늘 커밋은 뭐하지? 라는 생각이 들 때가 있다면 1일 1알고리즘 풀이를 해보시는 건 어떨까요? 풀 때마다 일일이 소스 코드를 Git에 올리는건 귀찮아... 예전에 저는 코딩테스트 플랫폼(프로그래머스, 구름, 백준 등)에서 문제를 풀어본 후, 맞은 소스 코드를 별도의 레포지터리를 구성해서 커밋을 했던적이 있습니다. 처음에는 할만했지만 시간이 지날수록 문제를 적고, 어떻게 풀었는지를 일일이 기록하는 것이 늘 귀찮은 일이었고, 결국 언제..