본문 바로가기

전체 글

(52)
1년 안에 개발자 취업 성공 후기 - 제로베이스 백엔드 취업 스쿨 INTRO 나는 개발자가 되기 전 클라우드 엔지니어로 직장 생활을 했었다. 운영을 하다 보니 반복적인 업무를 하는 경우가 많았는데 PowerShell Script를 사용해서 업무를 자동화시킨 적이 있었다. 효율적이었고 내가 원하는 작업 프로세스를 코딩으로 실현할 수 있다는 점이 흥미로웠다. 그렇게 나는 개발을 통해 얻는 즐거움과 성취감이 높게 느껴져서 개발자로 직무를 바꿔야겠다고 마음을 먹었다. 독학 vs 교육 우선 공부를 독학으로 할지 교육을 통해서 할지 고민을 해봤다. 요즘은 인터넷, 책, 공식문서, GPT 등 정보를 얻을 수 있는 곳이 많기 때문에 독학으로 공부를 시작해 봤다. 생각대로 정보를 수집하는데 어려움은 없었지만 블로그 글마다 내용이 다른 경우도 빈번했고, 개발자로 취업하기 위해서는 어떤 ..
HTTP 상태 코드 정리 HTTP란? HTTP(Hypertext Transfer Protocol)는 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식으로 TCP/IP 프로토콜 위에서 동작한다. 즉, 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야한다. 웹 브라우저의 주소창에 URL을 입력하고 Enter를 누르면 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹 서버에 HTTP 요청 메시지를 보낸다. 웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에 HTTP 응답 메시지로 보낸다.이처럼 요청 메시지와 응답 메시지가 반복적으로 오가며 웹을 사용할 수 있는 것이다. 서버에서의 처리 결과는 응답 메시지의 상태 라인에..
OAuth2.0 + Spring Security + JWT 프로젝트를 진행하면서 소셜 로그인(OAuth2.0), Spring Security, JWT Token 기능을 접목시켜 구현하기로 시도해 봤는데, 개념이 확실하게 잡히지 않은 채로 구현을 하려다 보니 소요시간이 오래 걸리기도 했고, 확실하게 이해하기 위해 따로 정리를 해봤다. 전체 동작과정 요약 사용자의 유저 에이전트(User Agent)가 클라이언트(Client)의 인증 시작 API를 호출한다. 클라이언트는 유저 에이전트를 카카오의 인증 URI(Authorization URI)로 리다이렉트한다. 사용자는 로그인을 수행한다. 인증 서버(Authorization Server)가 인증 성공 여부를 클라이언트로 전달한다. 성공 시 인증 코드(Authorization Code)가 전달된다. 클라이언트는 액세스 토..
Log Level 로그 레벨(Log Level)은 소프트웨어에서 발생하는 로그 메시지의 중요도 또는 심각성을 나타내는 수준을 말한다. 다양한 로그 레벨이 있으며, 각 레벨은 특정한 유형의 로그를 나타낸다. TRACE: 가장 상세한 로그 레벨로, 애플리케이션의 동작에 대한 매우 상세한 정보를 제공한다. 주로 디버깅 목적으로 사용되며, 애플리케이션의 내부 동작을 추적하고 문제를 해결하는 데 도움을 준다. DEBUG: 디버깅을 위한 로그 레벨이다. 애플리케이션의 상태와 실행 흐름에 관련된 중요한 정보를 제공한다. 주로 개발자가 코드의 동작을 추적하고 버그를 찾는 데 사용된다. INFO: 애플리케이션의 일반적인 운영 상태에 대한 정보를 제공한다. 주로 애플리케이션의 실행과 관련된 중요한 이벤트를 기록하며, 사용자에게 유용한 정보..
커넥션 풀 VS 캐시 동시성 이슈를 해결하기 위해 Distribution Lock을 사용했는데, 커넥션 풀과 캐시의 개념이 비슷하다고 생각하여 정리를 해봤다. 커넥션 풀 목적 DB연결에 대한 비용을 최소화하기 위해 사용된다. 매번 새로운 연결을 만드는게 아닌, 미리 만들어진 연결을 재사용함으로써 연결, 종료에 따른 오버헤드를 감소시킨다. (오버헤드 : 특정 기능을 수행하는데 드는 간접적인 시간, 메모리 등 소모되는 자원? 이라고 생각하면 될듯) 동작 초기에 미리 DB 연결을 생성하여 풀에 저장한다. 클라이언트에서 DB 연결이 필요할 때, 풀에서 사용 가능한 연결을 가져와 사용한다. 작업이 완료되면 연결을 다시 풀에 반환하여 재사용이 가능하게 한다. (풀 : 리소스를 미리 생성하고 관리하는 자료구조) 활용 트랜잭션과 같은 짧은..
sleep() vs wait() sleep()과 wait()은 스레드를 일시적으로 중지하는 데 사용되는 메서드이다. 하지만 개념과 목적이 다르다. sleep() 메서드는 주어진 시간 동안 스레드를 일시적으로 중지한다. 이는 정확한 시간 간격을 기다리거나, 일정한 딜레이를 주거나, 스레드의 실행을 잠시 멈출 때 유용하다. sleep()은 주어진 시간이 경과하면 자동으로 깨어나 다음 작업을 계속한다. 주로 시간 기반 작업을 수행할 때 사용된다. javaCopy code try { Thread.sleep(1000); // 1초 동안 스레드 중지 } catch (InterruptedException e) { e.printStackTrace(); } 반면, wait() 메서드는 스레드 간의 동기화를 위해 사용된다. 일반적으로 객체의 락을 획득한..
NginX NginX는 가벼운 웹 서버로 현재 많이 사용중이다. (나는 프록시 서버로 사용해봤다.) Nginx는 Igor Sysoev에 의해 개발된 고성능 웹 서버 및 리버스 프록시 서버이다. 기존 웹 서버보다 적은 자원을 사용하여 더 많은 연결을 처리할 수 있다. 다양한 운영 체제에서 사용할 수 있으며, 무료로 사용 가능한 오픈 소스 소프트웨어다. 주요 기능 웹 서버: 정적 파일 서비스, 가상 호스팅, SSL/TLS 지원 등을 포함한 웹 서버로서의 기능을 제공한다. 리버스 프록시 서버: 클라이언트 요청을 백엔드 서버로 전달하는 역할을 수행한다. 로드 밸런싱, 캐싱, SSL/TLS 종단 간 암호화 등 다양한 기능을 지원한다. 로드 밸런싱: 여러 대의 서버에 부하를 분산하여 웹 응용 프로그램의 성능을 향상시킨다. 캐..
Apache Kafka Apache Kafka는 대용량의 실시간 데이터 스트리밍 플랫폼으로서, 대규모의 데이터를 안정적으로 처리하고 분산 시스템 간에 신뢰성 있는 데이터 통신을 가능하게 한다. Kafka는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 스트림 처리 및 데이터 파이프라인 구축에 이상적이다. Kafka의 주요 특징과 구성 요소 퍼블리셔(Publisher)와 서브스크라이버(Subscriber): Kafka는 데이터를 생성하는 퍼블리셔와 데이터를 소비하는 서브스크라이버(또는 컨슈머) 간의 비동기식 통신을 지원한다. 퍼블리셔는 데이터를 Kafka 토픽으로 발행하고, 서브스크라이버는 해당 토픽에서 데이터를 구독하여 처리한다. 토픽(Topic): Kafka에서 데이터는 토픽이라는 주제별로 구분된다. 토픽은 데이터 ..
스크래핑 스크래핑(Scraping)은 웹 페이지나 웹 사이트에서 데이터를 수집하는 과정이다. 일반적으로 웹 페이지의 HTML 코드를 분석하여 원하는 정보를 추출하는 작업을 포함하며, 스크래핑은 웹 상의 다양한 데이터를 수집하고 분석하기 위해 사용된다. 스크래핑 과정 웹 페이지 접근 스크래핑을 위해선 웹 페이지에 접근해야 한다. 일반적으로 HTTP 또는 HTTPS를 통해 웹 페이지에 접속하게 된다. HTML 파싱 웹 페이지의 HTML 코드를 파싱하여 구조화된 형태로 변환한다. 파싱은 HTML 태그의 계층 구조를 분석하고, 요소들의 속성과 값을 추출한다. 데이터 추출 파싱된 HTML에서 필요한 데이터를 추출한다. 이때 CSS 선택자 또는 XPath와 같은 쿼리 언어를 사용하여 원하는 요소를 선택하고 데이터를 추출한다..
백엔드 신입 개발자가 쌓아야 하는 역량은? 백엔드 개발자를 준비할 때, 자료구조와 알고리즘도 필수적인 요소이다. 기본적으로 프로그램은 자료구조와 알고리즘의 합이라고 한다. 자료구조는 프로그램이 실행되는 동안 메모리의 효율성과, 실행속도, 정확성까지 높이는 데에 초점이 맞춰져 있고, 알고리즘은 자료구조의 목표를 달성하기 위해 정해진 절차나 방법에 있어 공식화 시킨 표현이라고 생각하면 될 것 같다. 간단한 프로그램들은 이러한 부분들이 사소하게 느껴질 수도 있겠지만, 개발자로 계속 나아가다보면 개발하는 프로그램의 규모도 매우 커질 것이고 안정적인 프로그램 운영을 위해 자료구조와 알고리즘을 배워야 한다. 또한, 요즘 개발자를 채용할 때도 코딩테스트의 비중이 높아졌는데 코딩테스트 시험도 자료구조와 알고리즘에 기반하여 문제가 출제된다. 이렇게 자료구조와 알..