분류 전체보기
[서평] 자바 코드의 품질을 높이는 100가지 방법
[서평] 자바 코드의 품질을 높이는 100가지 방법
2025.03.28한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다. 자바를 하며 실수할 수 있는 부분을 폭 넓게 다루는 책저는 최근 자바로 자주 코딩했습니다. 오랜만이라 나름 찾아보며 조심하게 짜도 실수들은 나왔습니다. 이 책은 그런 부분을 넓게 다루고 숫자 처리, 객체 비교처럼 사소하지만 중요한 디테일부터 프로그램 구조나 단위 테스트 같은 주제까지 폭넓게 다룹니다. 책의 특징정적 분석 도구를 강조하면서 실제 책에서도 "정적 분석" 정보를 거의 모든 부분마다 제시합니다. 이렇게 보여주면서도 정적 분석 도구의 한계와 실수를 예방할 수 있는 실전 팁 달아주는데 실제 코딩할 때도 자주 떠오르네요.전 인텔리제이에서 날리는 경고를 좀 더 깊게 이해할 수 있어서 도움됐습니다. 예방법까지! 그때 그때 뜰 때마다 문서를 봤는..
TLS 1.3 with Wireshark
TLS 1.3 with Wireshark
2025.03.20TLSHTTPS 복습 with TLS 1.2 feat. RSAHTTPS(HTTP Secure)는 HTTP 프로토콜에 SSL/TLS 암호화를 추가하여 보안성을 강화한 프로토콜이다.HTTPS는 웹 브라우저와 웹 서버 간의 통신을 암호화하여 제3자가 통신 내용을 도청하거나 조작하는 것을 방지하기 위한 장치이다.이미지 참고: https://prod-files-secure.s3.us-west-2.amazonaws.com/da29a764-c3f4-4c2d-a877-3d3f432b361e/42d68503-260d-4659-8aef-77cac8893bb2/image.png글 참고: https://blog.bytebytego.com/p/how-does-https-work-episode-6HTTPS에서는 데이터가 어떻게 ..
IPC
IPC
2025.03.20IPC(Inter-Process Communication)IPC란 여러 프로세스가 서로 데이터를 주고 받으면서 협력할 수 있도록 하는 방법이다.프로세스는 독립적인 실행 객체이기 때문에 서로 통신하기 어렵다는 문제가 있다.다른 프로세스간 통신을 하려면 커널단에서 제공되는 IPC를 사용해야 한다.여러 IPC 방법들에 관해 알아보자!1. Shared Memory프로세스가 공유 메모리 할당을 요청하면 커널은 해당 프로세스에 메모리 공간을 할당해준다. 그 메모리를 어떤 프로세스건 커널의 관여 없이 접근할 수 있다.장점데이터 전송 속도가 빠르다.단점데이터를 읽어야 하는 시점을 알기 어렵다쓰레드와 비슷하게 동시에 같은 메모리에 접근할 수 있기 때문에 동기화 문제를 해결해야 한다.from multiprocessing ..
프로세스 맛보기
프로세스 맛보기
2025.03.20PCB와 Context SwitchingProcess Control Block (PCB)PCB는 OS에서 특정 프로세스에 관한 정보를 담고 있는 자료구조이다. OS 프로세스는 PCB로 표현되고 OS는 PCB를 사용해서 이러한 프로세스를 추적하고 관리한다.PCB로 표현된 프로세스에 관한 정보를 우리 Context라고 부른다.구성 요소- 프로세스 상태: 프로세스의 현재 상태(예: 실행 중, 대기 중, 준비 완료 등)- 프로세스 Number(PID): 각 프로세스를 고유하게 식별하는 ID- 프로그램 Counter: 프로세스가 실행할 다음 명령어의 주소- CPU 레지스터: 누산기, 인덱스 레지스터, 스택 포인터 등 다양한 CPU 레지스터를 포함하며, 프로세스 실행 중 임시 데이터 및 중간 결과를 저장하는 곳- ..
시스템 콜
시스템 콜
2025.03.20System call왜 필요할까?가장 단순하게 어떤 프로세스든지 I/O나 다른 장치에 관한 여러 작업을 원하는 대로 두면 어떨끼?모든 프로그램은 디스크 전체를 덮어쓰거나 파일에 접근할 수 있게 된다. 파일 권한 확인하는 코드도 높은 가능성으로 무용지물이 되어버릴 가능성이 크다. 그래서 우리는 제한된 모드인 User mode와 kernal 모드로 프로세서의 모드를 나눠서 사용한다!User modeUser mode는 실행되느 코드가 할 수 있는 것이 제한된 모드이다. 예를 들어, I/O 요청을 할 수 없다. 만약 User mode에 있는데 I/O 요청을 날리면 프로세서가 예외를 발생시키고 OS가 프로세스를 종료시킬 가능성이 높다.Kernal mode커널 모드는 OS(Kernal)이 실행되는 모드이다. 여기서..
꼬리 재귀
꼬리 재귀
2025.03.20면접을 준비하며 남긴 노트를 발행해보고 있습니당꼬리 재귀에 관해 알아봅시당.Tail call optimization (TCO)def foo(): return bar() def bar(): pass 꼬리 재귀(tail recursion)꼬리 재귀 함수의 마지막 단계에서 자기 자신을 호출할 때 추가 연산 없이 바로 호출하는 경우를 의미한다. 꼬리 재귀는 일부 컴파일러에서 최적화를 통해 반복문처럼 처리되어 스택 오버플로우의 위험을 줄일 수 있다. 일반 재귀 함수public class FactorialExample { // Normal recursive function to calculate factorial public static int factorial(int n)..
캐시
캐시
2025.03.20취준하며 남긴 노트를 글로 발행해봅니당.캐시의 계층 구조메모리는 빠를수록 제조 비용이 높아진다. 하지만 우리의 돈은 한정되어 있지만 더 좋은 성능을 원하기 때문에 컴퓨터는 보통 계층적인 캐시 구조를 가진다.가장 비싸고 빠른 캐시 메모리인 L1을 CPU에 가까이 두고 그 다음으로 빠른 메모리를 배치한다. 자주 사용하는 데이터는 가장 빠른 L1에 저장되어 매우 빠르게 접근 된다. 이렇게 배치하면, 성능을 타협하며 전체적인 비용을 매우 낮출 수 있다.성능적으로 보면 어떨까? 계층 구조를 사용하면 여러 단계에서 캐싱을 할 수 있어서 CPU가 캐시에서 데이터를 찾을 확률이 높아진다. L1에서 못찾더라도 L2에서 발견할 가능성이 높다.출처: https://ocw.mit.edu/courses/6-004-computa..
폰 노이만 구조의 특징
폰 노이만 구조의 특징
2025.03.20취준하면 남긴 노트를 글로 발행해봅니당 :)폰 노이만 구조의 특징1. 프로그램이 내장되어 있다instruction이 linear하게 메모리에 저장된다저장된 데이터는 Control Signal에 따라 다르게 해석할 수 있다2. 순차적으로 instruction 처리한다한번에 한 Instruction이 처리된다Program Counter(PC)가 현재 명령어를 가리킨다PC는 순차적으로 증가한다.Control Transfer Instruction들은 예외이다.Micro-Architecture 수준에서 바라본 Execution model의 구현착각하지 말자. 실제 MicroArchitecture 레벨로 내려가서 보면 구현된 실행 모델의 대부분이 매우 다르다.예를 들어서, 실제 마이크로 수준의 구현을 보면 동시에 ..
Container화 한 Spring Boot 3의 baseUrl을 Nginx header로 알맞게 바꿔주자!
Container화 한 Spring Boot 3의 baseUrl을 Nginx header로 알맞게 바꿔주자!
2025.03.04OAuth2 Redirect URI 관련 문제 발생이번 프로젝트는 Nginx로 도커 환경으로 서버를 분리된 서버에 전달되도록 구성했습니다. 그래서 application의 {baseUrl}이 자동으로 서버 Url로 설정이 될 줄 알았는데 Nginx가 앞에 있어서 실제 유저가 접속할 때 쓰는 Url과 다른 Url이 되는 것을 알게 되었습니다. {baseUrl}이 이상하니 이 주소 기반으로 된 OAuth2 redirect-uri 설정도 문제가 생겼습니다. 배포 파이프라인을 수정할까 했는데 생각보다 깔끔하게 해결할 수 있었습니다. 이걸 해결하며 발견한 것들을 공유해보고자 합니다.현재 서버 구성현재 개발용과 프로덕션용으로 Spring Boot 애플리케이션 2개를 하나의 서버에 컨테이너화하여 도커로 배포하고 있습니..
[서평] 그로킹 알고리즘(개정판)
[서평] 그로킹 알고리즘(개정판)
2025.02.28"한빛미디어 서평단 활동을 위해서 책을 협찬 받아 작성된 서평입니다."알고리즘을 처음 공부할 친구들에게 소개해주고 싶은 책저는 이 책을 읽고 수학적 엄밀함보다 직관적인 이해에 중점을 둔 알고리즘 입문서라고 느꼈습니다. 그리고 가장 큰 특징은 처음 보면 복잡하고 막막할 수 있는 알고리즘 개념의 거의 모든 것을 시각적으로 표현했다는 점입니다.기본적인 자료구조과 대표적인 알고리즘이 그림으로 귀엽게 설명되어 있어서 재밌게 읽을 수 있습니다. 코드는 간단하게 파이썬으로 작성되어 있고 복잡할 수도 있는 실행 과정은 모두 시각화되어 있어서 직관적으로 이해하기 쉽습니다. 알고리즘을 이전에 공부해본 저는 알고리즘은 (조금 과장을 보태서 ㅎㅎ) 코드하고 그림만으로도 충분히 이해가 될 정도였습니다.알고리즘을 공부할 때, ..
[서평] 객체에서 함수로
[서평] 객체에서 함수로
2025.02.05길벗출판사로부터 책을 제공받아 작성된 리뷰입니다.최근 읽은 책 중 가장 유익하고 도전적이었던 책함수형 실전 적용을 위한 여러 팁을 얻을 수 있다소개이 책은 제목 그대로, 코틀린에서 객체와 결합하여 함수형 프로그래밍을 어떻게 활용할 수 있는지를 다룹니다. 단순한 개념 설명을 넘어, 철저하게 함수형 프로그래밍의 철학과 원칙을 반영한 코드 예시를 제시합니다.책을 읽기 전, 저도 함수형 프로그래밍에 관심을 두고 여러 시도를 해봤습니다. 예를 들어, 스프링 코드에 Java Stream을 적용해보거나, 함수형 코틀린 책을 구매해 학습하며 직접 코드를 작성해보기도 했습니다. 그렇지만 여러 고차함수들을 알게되며, 이것들에 관해 조금만 깊이 들어가도 카테고리 이론이 등장하고 모르는 개념이 나와서 함수형 프로그래밍을 선호..
[Kotlin] 클로저(Closure)
[Kotlin] 클로저(Closure)
2025.01.30최근에 Refactoring2를 읽으며 자바로 1장을 그대로 실습하려고 했지만 중첩 함수가 지원되지 않아서 따로 클래스, static 함수, 람다로 빼다 보니 책의 흐름과 다소 달라져서 그냥 코틀린으로 실습해보았다. 코틀린은 중첩함수와 Closure가 지원되기 때문에 중첩함수를 자주 활용하는 JS 예제도 비슷하게 따라할 수 있어서 좋았다~!클로저란 뭘까?클로저(Closure)는 함수가 정의될 때의 환경을 기억(Capture)하고 유지하는 개념이다. 클로저는 자신이 선언된 범위(scope)의 변수를 계속해서 유지하고 이후(그 당시에 환경이 소멸됐더라도!)에도 변경할 수 있다.예제 코드먼저 코드부터 봐보자fun incrementFrom(start: Int): (Int) -> Int { // 외부 함수 ..