전체 글
-
REST(Representational State Transfer)는 자원의 표현을 이용하여 상태를 주고받는 것으로, 자원은 소프트웨어가 관리하는 모든 것, 자원의 표현은 자원을 나타내기 위한 이름을 의미한다. 예를 들어 서버가 관리하는 회원 데이터는 Member라 표현할 수 있고, 최근에는 일반적으로 자원의 상태를 나타내기 위해 JSON을 사용한다. 즉, REST는 네트워크 상에서 클라이언트와 서버가 통신하는 방법 중 하나이며 HTTP를 사용한다. 이때 HTTP URI를 사용하여 자원을 명시하고 HTTP METHOD를 통해 CRUD 연산을 적용한다. URI는 Uniform Resource Identifier, 즉 리소스 그 자체를 말하는 것이고, URI는 URL(Uniform Resource Locat..
REST란?REST(Representational State Transfer)는 자원의 표현을 이용하여 상태를 주고받는 것으로, 자원은 소프트웨어가 관리하는 모든 것, 자원의 표현은 자원을 나타내기 위한 이름을 의미한다. 예를 들어 서버가 관리하는 회원 데이터는 Member라 표현할 수 있고, 최근에는 일반적으로 자원의 상태를 나타내기 위해 JSON을 사용한다. 즉, REST는 네트워크 상에서 클라이언트와 서버가 통신하는 방법 중 하나이며 HTTP를 사용한다. 이때 HTTP URI를 사용하여 자원을 명시하고 HTTP METHOD를 통해 CRUD 연산을 적용한다. URI는 Uniform Resource Identifier, 즉 리소스 그 자체를 말하는 것이고, URI는 URL(Uniform Resource Locat..
2025.02.26 -
캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소로, 이를 통해 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다. 이러한 캐시를 통해 성능을 향상하고 부하를 감소할 수 있지만 캐시를 사용하는 방식에 따라 서비스에 다른 영향을 미칠 수도 있다.Cache Aside(Lazy Loading) Cache Aside(Lazy Loading) 방식은 캐시 히트, 즉 캐시에 데이터가 존재하면 캐시에서 데이터를 불러오고 그렇지 않으면(캐시 미스) 원본 데이터베이스에서 조회하여 반환하는 방식으로 이때 조회한 데이터를 캐시에 적재한다. 해당 방식은 실제 요청된 데이터만 캐시에 저장하므로 불필요한 캐싱을 줄일 수 있지만, 초기에 대량의 캐시 미스로 인해 데이터베이스에 부하가 발생할 수 있다..
캐싱 전략에 대해캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소로, 이를 통해 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다. 이러한 캐시를 통해 성능을 향상하고 부하를 감소할 수 있지만 캐시를 사용하는 방식에 따라 서비스에 다른 영향을 미칠 수도 있다.Cache Aside(Lazy Loading) Cache Aside(Lazy Loading) 방식은 캐시 히트, 즉 캐시에 데이터가 존재하면 캐시에서 데이터를 불러오고 그렇지 않으면(캐시 미스) 원본 데이터베이스에서 조회하여 반환하는 방식으로 이때 조회한 데이터를 캐시에 적재한다. 해당 방식은 실제 요청된 데이터만 캐시에 저장하므로 불필요한 캐싱을 줄일 수 있지만, 초기에 대량의 캐시 미스로 인해 데이터베이스에 부하가 발생할 수 있다..
2025.02.25 -
아... 너무 어렵다 DP 기존에 DP문제는 뭔가 특정 시점의 상태값에 대해 더 더하거나 빼거나 해서 다음 상태값을 결정하는 거였는데, 이건 새로운 느낌의 DP문제였다. 우선 큰 그림은몸무게들의 총합을 구해서 (총 사람수 n / 2) 명으로 최대한 (몸무게의 총합 / 2)에 가깝게 만들기이다. 일단 dp 테이블은 dp [한 팀에 최대로 들어갈 수 있는 사람 수][최대 몸무게]로 정했다. 각 dp [i][j]에서 값은 해당 사람 수(i)에서 무게(j)를 만들 수 있으면 1, 없으면 0으로 정했다. 이때 dp [0][0] 즉 0명으로 무게 0을 만들 수 있으므로 dp[0][0]=1로 잡고 시작했다. 그다음에 입력받은 무게들에 대해 dp를 돌려줘야 하는데, 우선 입력값은 다음과 같다. 41235 이러면 정답..
백준 4384 - 공평하게 팀 나누기 (C++)아... 너무 어렵다 DP 기존에 DP문제는 뭔가 특정 시점의 상태값에 대해 더 더하거나 빼거나 해서 다음 상태값을 결정하는 거였는데, 이건 새로운 느낌의 DP문제였다. 우선 큰 그림은몸무게들의 총합을 구해서 (총 사람수 n / 2) 명으로 최대한 (몸무게의 총합 / 2)에 가깝게 만들기이다. 일단 dp 테이블은 dp [한 팀에 최대로 들어갈 수 있는 사람 수][최대 몸무게]로 정했다. 각 dp [i][j]에서 값은 해당 사람 수(i)에서 무게(j)를 만들 수 있으면 1, 없으면 0으로 정했다. 이때 dp [0][0] 즉 0명으로 무게 0을 만들 수 있으므로 dp[0][0]=1로 잡고 시작했다. 그다음에 입력받은 무게들에 대해 dp를 돌려줘야 하는데, 우선 입력값은 다음과 같다. 41235 이러면 정답..
2025.02.24 -
로드 밸런싱이란? [매일메일] 다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은?세션 불일치 문제란? 기존 서버의 사양을 업그레이드하여 시스템을 확장하는 방식인 스케일 업(Scale-Up)과는 달리 서버를 여러 대 추가하여 시스템을 확장하는 방식인 스케일 아웃(Scale-Out) 사dockerel.tistory.com 이전에 올렸던 다중 서버 환경에서 스티키 세션 방식의 경우 로드 밸런서에 의해 요청이 각 서버에 분배되게 된다. 이를 로드 밸런싱이라 하는데, 이는 애플리케이션에 들어오는 네트워크 요청(트래픽)을 균등하게 분산시키는 것을 말한다. 위 사진과 같이 로드 밸런서는 서버들의 앞단에 존재하며 이를 통해 애플리케이션의 가용성, 확장성 그리고 보안 및 성능을 확보할..
로드 밸런싱에 대해...로드 밸런싱이란? [매일메일] 다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은?세션 불일치 문제란? 기존 서버의 사양을 업그레이드하여 시스템을 확장하는 방식인 스케일 업(Scale-Up)과는 달리 서버를 여러 대 추가하여 시스템을 확장하는 방식인 스케일 아웃(Scale-Out) 사dockerel.tistory.com 이전에 올렸던 다중 서버 환경에서 스티키 세션 방식의 경우 로드 밸런서에 의해 요청이 각 서버에 분배되게 된다. 이를 로드 밸런싱이라 하는데, 이는 애플리케이션에 들어오는 네트워크 요청(트래픽)을 균등하게 분산시키는 것을 말한다. 위 사진과 같이 로드 밸런서는 서버들의 앞단에 존재하며 이를 통해 애플리케이션의 가용성, 확장성 그리고 보안 및 성능을 확보할..
2025.02.21 -
세션 불일치 문제란? 기존 서버의 사양을 업그레이드하여 시스템을 확장하는 방식인 스케일 업(Scale-Up)과는 달리 서버를 여러 대 추가하여 시스템을 확장하는 방식인 스케일 아웃(Scale-Out) 사용 시 각 서버(WAS)는 각각 세션 저장소를 독립적으로 가지기 때문에 데이터 불일치 문제가 발생할 수 있다. 예를 들어 유저의 요청으로 유저의 세션 아이디가 서버 WAS1의 세션 저장소에 저장된다. 하지만 그 후 유저의 요청이 서버 WAS2로 보내진 경우 WAS2의 세션 저장소에는 유저의 세선 정보가 존재하지 않기 때문에 데이터 불일치 문제가 발생한다. 이를 세션 불일치 문제라 하고 이는 크게 3가지 방식(스티키 세션 방식, 세션 클러스터링 방식, 스토리지 분리 방식)으로 해결할 수 있다. 해결 방..
[매일메일] 다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은?세션 불일치 문제란? 기존 서버의 사양을 업그레이드하여 시스템을 확장하는 방식인 스케일 업(Scale-Up)과는 달리 서버를 여러 대 추가하여 시스템을 확장하는 방식인 스케일 아웃(Scale-Out) 사용 시 각 서버(WAS)는 각각 세션 저장소를 독립적으로 가지기 때문에 데이터 불일치 문제가 발생할 수 있다. 예를 들어 유저의 요청으로 유저의 세션 아이디가 서버 WAS1의 세션 저장소에 저장된다. 하지만 그 후 유저의 요청이 서버 WAS2로 보내진 경우 WAS2의 세션 저장소에는 유저의 세선 정보가 존재하지 않기 때문에 데이터 불일치 문제가 발생한다. 이를 세션 불일치 문제라 하고 이는 크게 3가지 방식(스티키 세션 방식, 세션 클러스터링 방식, 스토리지 분리 방식)으로 해결할 수 있다. 해결 방..
2025.02.20 -
일단 숫자 크기를 보니 O(n)으로는 절대 안 된다는 건 알겠다. 그래서 내린 결론은? 이분탐색 인데... 뭘 기준으로 이분탐색을 진행할지 고민을 많이 했던 것 같다. 일단 결론은 모든 놀이기구를 타는 시간을 기준으로 해결하였다. minT=0maxT=n*max(times) # 놀이기구 타는 최대 시간 최대 시간을 어떤 식으로 잡을까 하다가 n명이 가장 시간이 오래 걸리는 놀이기구 max(times)를 탄다고 생각하면 될 것 같아 n*max(times)로 최대 시간을 표현해보았다. 그다음엔 n명을 처리가능한 최소 시간을 찾아보겠다. 물론 이분탐색으로 찾는 거다. retT=0 # n명 처리 가능한 최소 시간while minT 여기에서 핵심 포인트는 처리 가능한 사람 수를 찾는 로직인데, 첨에 생각할 때는 예..
백준 1561 - 놀이 공원 (Python)일단 숫자 크기를 보니 O(n)으로는 절대 안 된다는 건 알겠다. 그래서 내린 결론은? 이분탐색 인데... 뭘 기준으로 이분탐색을 진행할지 고민을 많이 했던 것 같다. 일단 결론은 모든 놀이기구를 타는 시간을 기준으로 해결하였다. minT=0maxT=n*max(times) # 놀이기구 타는 최대 시간 최대 시간을 어떤 식으로 잡을까 하다가 n명이 가장 시간이 오래 걸리는 놀이기구 max(times)를 탄다고 생각하면 될 것 같아 n*max(times)로 최대 시간을 표현해보았다. 그다음엔 n명을 처리가능한 최소 시간을 찾아보겠다. 물론 이분탐색으로 찾는 거다. retT=0 # n명 처리 가능한 최소 시간while minT 여기에서 핵심 포인트는 처리 가능한 사람 수를 찾는 로직인데, 첨에 생각할 때는 예..
2025.02.18 -
아 맞다 그런게 있었지 Record는 Java 16에서 정식 출시된 새로운 유형의 클래스로 모든 필드가 final 키워드로 선언되기 때문에 불변성(Immutable)의 특징이 존재한다. 또한 자동으로 생성자, getter, equals, hashCode, toString 등의 메서드를 자동으로 생성해준다. // 생성자, getter, hashCode(), equals(), toString() 자동 완성public record MemberDto(String name, String email, int age) {} 특히 계층 간 데이터 전송을 목적으로 하는 DTO로 사용될 수 있으며 자동으로 여러 메서드를 생성해주기 때문에 보일러 플레이트 코드를 줄일 수 있다. 그렇지만 Record는 다른 클래스를 상..
Record를 DTO로 사용하는 이유?아 맞다 그런게 있었지 Record는 Java 16에서 정식 출시된 새로운 유형의 클래스로 모든 필드가 final 키워드로 선언되기 때문에 불변성(Immutable)의 특징이 존재한다. 또한 자동으로 생성자, getter, equals, hashCode, toString 등의 메서드를 자동으로 생성해준다. // 생성자, getter, hashCode(), equals(), toString() 자동 완성public record MemberDto(String name, String email, int age) {} 특히 계층 간 데이터 전송을 목적으로 하는 DTO로 사용될 수 있으며 자동으로 여러 메서드를 생성해주기 때문에 보일러 플레이트 코드를 줄일 수 있다. 그렇지만 Record는 다른 클래스를 상..
2025.02.17 -
일단 결론부터 말하자면 트랜잭션이 동작하지 않는다. @Transaction 과 같은 어노테이션들은 모두 런타임에 동작하는 Spring AOP를 기반으로 동작하는데 Spring AOP에서는 어노테이션이 붙어있는 타겟 클래스의 프록시를 만들어 해당 타겟 클래스의 메서드 수행 전후에 일련의 처리를 한다. 이때 타겟 클래스의 타입에 따라 인터페이스 기반의 프록시 생성 시 JDK Dynamic Proxy, 그 외에는 CGLIB을 사용한다고 한다. 우선 Spring이 빈 생성시 해당 빈에 AOP 어노테이션이 있는지 확인하고 만약 있다면 프록시 객체를 생성하여 빈을 대체한다. 이때 위에서 말한 JDK Dynamic Proxy의 경우 인터페이스의 public 메서드, CGLIB의 경우 private를 제외한 pub..
[매일메일] private 메서드에 @Transactional 선언하면 트랜잭션이 동작할까?일단 결론부터 말하자면 트랜잭션이 동작하지 않는다. @Transaction 과 같은 어노테이션들은 모두 런타임에 동작하는 Spring AOP를 기반으로 동작하는데 Spring AOP에서는 어노테이션이 붙어있는 타겟 클래스의 프록시를 만들어 해당 타겟 클래스의 메서드 수행 전후에 일련의 처리를 한다. 이때 타겟 클래스의 타입에 따라 인터페이스 기반의 프록시 생성 시 JDK Dynamic Proxy, 그 외에는 CGLIB을 사용한다고 한다. 우선 Spring이 빈 생성시 해당 빈에 AOP 어노테이션이 있는지 확인하고 만약 있다면 프록시 객체를 생성하여 빈을 대체한다. 이때 위에서 말한 JDK Dynamic Proxy의 경우 인터페이스의 public 메서드, CGLIB의 경우 private를 제외한 pub..
2025.02.07