분류 전체보기

    [알고리즘] 우아한 테크캠프(백엔드) 6기 1차 코딩 테스트 후기

    후기 2023.05.06 13:00 ~ 16:00 취업을 하고나서 코딩 테스트(알고리즘) 공부를 안 한지 6개월이 넘었다. 그래서 감도 잃지 않고자 그리고 그동안 C++로만 준비를 했었기 때문에 Java로 코딩 테스트도 체험 해보고자 응시하였다. 과제 테스트도 궁금하기도 했고 사람일은 모르기 때문에 미리 준비해두었다 ㅎ.. 코딩 테스트는 프로그래머스에서 총 3시간으로 4문제가 출제되었고, 백엔드 코스답게 Java로만 응시할 수 있었다 Java로는 코딩 테스트를 준비해본 적이 없어서 처음 참여해보는 것이였다 다행히 프로그래머스라서 입출력은 따로 요구하지 않고 함수에 매개변수와 값 반환을 통해 문제를 풀이하면 되어서 입출력을 찾아보지 않아도 되어 좋았다 난이도는 브론즈~골드하위권 정도 되는 문제들이 출제되었..

    Redis와 캐시

    Redis란 Remote Dictionary Server의 준말로 Remote에 위치하고 프로세스로 존재하는 인 메모리 기반의 NoSQL DB로 Key-Value 구조인 데이터 관리 시스템이다. 비 관계형 데이터를 저장하기에 적합하고 쿼리 연산을 지원하지 않지만, 관계형 데이터베이스보다 빠른 읽기와 쓰기에 용이하다. 문자열, 리스트, 해시, 집합, 정렬된 집합 등의 데이터 구조를 지원하며 대규모 분산 시스템에서 많이 사용된다. 데이터베이스의 캐시, 메시징 시스템, 세션 저장소, 분산 락 관리, 게임 서버 등 여러 분야에서 사용된다. 자주 사용되는 곳 - 인증 토큰 등을 저장 - Ranking 보드로 사용 - 유저 API Limit - Job Queue 캐시 한 번 조회된 데이터를 미리 특정 공간에 저장해..

    Netty와 Spring Webflux

    Netty란비동기 이벤트 기반 네트워크 응용프로그램 프레임워크이다. 단순히 네트워크 통신과 관련된 기능 뿐만이 아니라 여러 네트워크 어플리케이션에서의 기능도 제공하고 있어 서버 개발자들이 자신의 비즈니스 로직에 더 집중할 수 있도록 할 수 있다. Netty 프레임워크의 특징비동기 입출력 Netty 프레임워크는 비동기 처리를 지향한다. 요청을 보낸 뒤 즉시 반환한 다음 다른 작업을 하다 요청한 작업의 처리가 완료되면 나중에 응답 받는 방식이다. 보낸 요청의 응답이 올 때까지 기다리는 동기와 상반된 방식 Blocking & Non Blocking Socketread, write, accept 등의 메서드가 호출되면 완료될 떄까지 쓰레드가 멈추는 블로킹 방식과 하나의 스레드로 여러 클라이언트를 대응하는 논 블..

    Spring AOP 프록시 패턴

    AOP란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이다. OOP를 보완하는 것으로 여러 곳에서 자주 사용되는 공통 기능을 모듈화하여 쓰이는 곳에 필요할 때 연결해 유지보수와 재사용성을 용이하도록 프로그래밍 하는 것 AOP를 적용하는 방법 컴파일 타임 적용 : 컴파일 시점 바이트 코드 조작 로드 타임 적용 : 클래스 로딩 시점 런타임 적용 : 스프링 AOP 채택, Bean을 만들 때 Proxy Bean을 만들어 Proxy Bean이 Aspect 코드를 추가하여 동작하는 방법 스프링 빈이란? Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다. 제어의 역전으로 인해 프레임워크가 객체를 주입을 맡게 되면서, 주입할 객체를 관리해야하는데 이를 빈이..

    TCP/IP Socket vs RESTful API vs gRPC vs WebSocket

    들어가면서 서버에서 클라이언트 혹은 다른 서버와 통신하는 방법으로 여러가지가 있지만 그 중에서 TCP 상에서 IPC를 위해 자주 사용되는 TCP/IP Socket, RESTful API, gRPC, WebSocket의 차이를 공부하고자 한다 프로세스는 기본적으로 상호독립적으로 가동되기 때문에 서로 메모리를 공유하지 않고, 서로 간섭하지 않는다. 그렇기 때문에 프로세스간의 정보교환이 이루어져야 할 때의 방법 중 하나가 IPC이다. 서버는 각 클라이언트와 일대일 혹은 일대다의 관계를 가지며 일대일의 경우 Request/Response, Notification이 통신에 사용되며, 일대다의 경우 Publish/Subscribe 구조를 가지게 된다. (다른 경우도 있지 않을까?) TCP/IP Socket TCP/..

    벌크 연산과 @Modifying 어노테이션

    요약 JPA를 이용하게 되어도 쿼리를 작성해야하는 순간이 오는데 다중 write 연산인 Bulk 연산과 @Modifying 어노테이션에 대해서 정리하였다. JPA는 영속성 컨텍스트에 오브젝트를 캐싱하는데 이때 @Modifying 설정에 따라 캐싱된 데이터와 DB의 데이터가 일관하지 않을 수 있다. 이를 고려하여 코드를 작성하여야 한다. @Modifying @Query 어노테이션(JPQL Query, Native Query)을 통해 작성된 insert, update, delete 쿼리에서 사용되는 어노테이션 기본적으로 JpaRepository에서 제공하는 메서드 혹은 메서드 네이밍으로 만들어진 쿼리에는 적용되지 않는다 clearAutomatically, flushAutomactically 속성 변경 가능 ..

    비관적 락, 낙관적 락

    Lock이란 DB 충돌 상황을 개선하기 위해 사용하는 것 방법 테이블의 row에 접근 시 lock을 걸고 다른 lock이 걸려 있지 않는 경우에만 수정이 가능하도록 설정 수정할 때 내가 먼저 이 값을 수정했다고 명시하여 다른 사람이 동일한 조건으로 값을 수정할 수 없게 하는 것 낙관적 락(Optimistic Lock) 이론 수정할 때 내가 이 값을 수정했다고 명시하여 다른 사람이 동일한 조건으로 값을 수정할 수 없게 하는 것 (주로 versioning) DB에서 제공하는 것이 아닌 어플리케이션 레벨에서 잡아주는 Lock 애시당초 버전을 동시에 select query에 사용하기 때문에 해당 row가 update된 경우 찾을 수 없음 hashcode와 timestamp를 이용하기도 한다 비관적 락(Pessi..

    [해커톤] 2022 인하대학교 컴퓨터공학과 해커톤 은상 수상 후기

    2022.12.18 19:00 2022년도 인하대학교가 소프트웨어융합대학이 되면서 하계에는 아이디어톤, 동계에는 해커톤이 진행되었다. 아이디어톤과 마찬가지로 재학생 신분이면 지원할 수 있었고, 총 8~9팀 정도가 신청하였다. 팀은 최소 3인이였기도 했고, 상장 및 상금 지급이 늦어 글을 늦게 작성하게 됐지만 이때 당시에는 ssg 인턴만 붙고 넷마블은 붙지 않은 상황이였기 때문에 해커톤을 준비했고, 블록체인을 하는 친구들과 블록체인 프로젝트를 해보면 어떨까~ 해서 팀을 꾸렸다. 팀원은 백엔드 및 팀장(나), 그리고 블록체인 및 프론트엔드 개발자 2명, ios 개발자 1명으로 구성하였다. 다른 해커톤을 많이 참가해봤지만 이번 해커톤은 13시간동안 만드는 것으로 매우 짧았다. 주제를 당일 알려주어 프로젝트를 ..