메세지 큐를 활용한 트랜잭션 관리 - 기술적 챌린지
·
Spring
크래프톤 정글 2기의 마지막 커리큘럼인 "나만의 무기 갖기" 단계에서 개발하면서 겪었던 기술적 챌린지를 정리하려고 합니다. 우선 우리의 서비스는 개발자의 GitHub 활동을 분석하여 개인화된 이력서 템플릿을 제공하며, 기업과 개발자 간의 채용 과정을 간편하고 효율적으로 만들어주는 시스템입니다. 개발자의 GitHub를 분석해야 하다 보니 많은 API 호출 및 GPT API를 호출하는 과정이 발생합니다. 처음에는 기능만 목표로 구현을 했기 때문에 동기적으로 데이터를 호출하고 데이터 베이스에 저장했습니다. 하지만 GitHub계정을 분석하는데 시간이 너무 오래 걸렸기 때문에 이 속도를 줄이기 위해 리액티브 프로그래밍인 Flux와 Mono를 사용해서 비동기 호출로 코드를 변경하였습니다. 아래는 관련 코드들 중 하..
구름톤 챌린지 2주 차 학습 일기(Day 02)
·
알고리즘/구름톤
문제 구름 찾기 게임은 한 변의 길이가 인 격자 모양의 게임판에서 진행하는 게임이다. 게임판의 일부 칸에는 구름이 숨겨져 있고, 게임판에 숨겨진 모든 구름의 위치를 찾으면 게임에서 승리할 수 있다. 구름 찾기 게임의 제작자인 플레이어는 조금 더 쉽게 구름을 찾을 수 있도록 도와주는 깃발을 게임판 위에 설치하려고 한다. 깃발은 구름이 없는 칸이면서, 상하좌우와 대각선으로 인접한 여덟 칸 중 구름이 하나 이상 있는 칸에만 설치할 수 있다. 이렇게 설치한 깃발에는 인접한 여덟 칸 중 구름이 있는 칸의 개수에 해당하는 값이 적힌다. 플레이어는 깃발을 세울 수 있는 모든 칸에 깃발을 세워두었다. 문득, 플레이어는 깃발 중 값이 인 깃발이 몇 개나 있는지가 궁금해졌다. 여러분이 플레이어를 대신해 값이 인 깃발의 개..
구름톤 챌린지 2주 차 학습 일기(Day 01)
·
알고리즘/구름톤
문제 길이가 인 문자열 가 주어진다. 플레이어는 문자열 를 서로 겹치지 않는 개의 부분문자열로 나누려고 한다. 부분문자열은 모두 길이가 이상이어야 하며, 원래 문자열에서 연속해야 한다. 문자열을 나누는 방법에 따라 플레이어는 점수를 얻을 수 있다. 점수는 다음 과정에 따라 계산된다. 문자열 를 위 조건에 따라 나눴을 때, 등장하는 모든 부분문자열을 중복 제거하고 사전순으로 정렬한 결과를 라고 한다. 나누어진 개의 문자열이 각각 에서 번째로 등장하는 문자열이라면, 얻을 수 있는 점수는 이다. 예를 들어, abcd라는 문자열을 개의 부분문자열로 나누는 방법은 {a, b, cd}, {a, bc, d}, {ab, c, d}의 세 가지가 있다. 여기서 부분문자열을 중복 제거하고 사전 순서로 정렬한 결과는 a, a..
[TIL]23.08.19(토) - 크래프톤 정글 2기 후기
·
TIL
TIL을 쓴 지 거의 두 달은 넘은 것 같은데 그동안 블로그를 쓸 시간이 없기도 했고 프로젝트에 집중하다 보니 블로그에 글을 써야 한다는 생각이 들지 않을 정도로 바쁘게 지나갔던 것 같다. 크래프톤 정글에 입소한 지 얼마 안 된 거 같은데 엊그제 8월 17일 크래프톤 정글 2기 수료식을 마쳤고 현재는 공식적인 일정은 다 끝났다. 처음 들어왔을 때에는 단지 전공자라는 타이틀하나로 기본기도 제대로 갖춰지지 못한 상태로 입소했던 것 같은데 지금 와서 생각해 보면 그래도 꽤나 많은 지식들을 얻어서 수료한 것 같다. 중간중간 커리큘럼에 대해서 의구심이 생길 때도 있었지만 다 이유가 있었던 것 같고 개발자로서 필요한 CS지식들 위주의 커리큘럼이라서 특히 마지막 "나만의 무기 갖기" 프로젝트에서 많은 도움이 되었다...
웹 애플리케이션 이해
·
Spring
1️⃣ 웹 서버(Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat) Jetty, Undertow 웹 서버, 웹 애플리케이션 서버의 차이점 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 사실은 둘의 용어도 경계도 모호함 웹 서버도 프로그램을 실행하는 기능을 포함하기도 함 웹 애플리케이션 서버도..
객체 지향 설계와 스프링
·
Spring
스프링이란? 스프링 부트 스프링 Rest Docs, 스프링 시큐리티 핵심 개념 - 이 기술을 왜 만들었는가 / 이 기술의 핵심 컨셉은 ? : 스프링은 자바 언어 기반의 프레임워크, 스프링은 객체 지향 언어가 가장 강력한 특징을 살려내는 프레임워크, 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 좋은 객체 지향 프로그래밍이란? - 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 다형성(Polymorphism) 실세계와 객체 지향을 1:1로 매핑X 그래도 실세계의 비유로 이해하기에는 좋음 역할과 구현으로 세상을 구분 자동차가 바껴도 운전을 할 수 있다 -> 새로운 자동차가 나와도 클라이언트는 새로운 걸 안배워도 되..
[Pintos-Kaist] Project3 - Swap In/Out
·
운영체제
이번에는 프로젝트 3의 마지막 구현과제인 Swap In/Out에 대해서 구현을 해보도록 하겠습니다. 먼저 메모리 스왑은 물리적 메모리 사용량을 최대화하기 위한 메모리 회수 기술입니다. 주 메모리의 프레임이 할당되면 시스템은 사용자 프로그램의 메모리 할당 요청을 더 이상 처리할 수 없습니다. 한 가지 해결책은 현재 사용되지 않는 메모리 프레임을 디스크에 스왑아웃하는 것입니다. 이렇게 하면 일부 메모리 리소스를 확보하여 다른 애플리케이션에서 사용할 수 있습니다. Anonymous Page에는 백업 스토리지가 없기 때문에 스왑을 지원하기 위해 스왑 디스크라는 임시 백업 스토리지를 만들어서 사용합니다. 그에 반해 File Mapped Page는 콘텐츠를 파일에서 가져오기 때문에 매핑된 파일을 백업 저장소로 사용..
[Pintos-Kaist] Project3 - Stack Growth, Memory Mapped Files
·
운영체제
이번 포스팅에서는 Stack Growth, Memory Mapped Files에 대한 구현을 해보겠습니다. Stack Growth 구현 1️⃣ bool vm_try_handle_fault (struct intr_frame *f, void *addr, bool user, bool write, bool not_present) 이 함수는 페이지 오류 예외를 처리하는 동안 userprog/exception.c의 page_fault에서 호출됩니다. 이 함수에서는 페이지 오류가 스택 증가에 유효한 경우인지 여부를 확인해야 합니다. 스택 증가로 오류를 처리할 수 있음을 확인했다면 오류가 발생한 주소로 vm_stack_growth를 호출합니다. bool vm_try_handle_fault (struct intr_fra..
yunchan^.^
'분류 전체보기' 카테고리의 글 목록 (3 Page)