- [소프티어] 성적평균2025-01-23 22:24:18https://softeer.ai/practice/6294#pop_user Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai이번 문제는 어려운 알고리즘이 존재하진 않았다고 생각하고 배울만한 점은 StringTokenizer 선언하는 위치에 대해 확실하게 알게된 점이랑 소수점 반올림 방식 중 String.format("%.nf", 숫자) 을 사용하여 소수점 n의 자리까지 표현 가능한 것을 배웠다. 전체 코드import java.io.*;import java.util.*;public class Main { private static int[] grades; public static void main(String[] args) throws IOException { B..
- 자료구조 스택에 대해서 설명해주세요.2025-01-23 10:21:50스택(Stack) 은 후입선출이라는 개념을 가진 선형 자료구조입니다. 스택 자료구조에서 삭제(pop)는 가장 최상단(top)에서만 이루어집니다.비어있는 스택에서 값을 추출하려고 시도하는 경우를 스택 언더플로우라고 하며, 스택이 넘치는 경우를 스택 오버플로우라고 합니다.대표적인 활용 사례는 스택 메모리, 브라우저 뒤로가기 기능, 언두 기능, 수식 괄호 검사 등이 있습니다.자바에서 스택은 어떻게 사용할 수 있나요?Stack이라는 클래스를 사용할 수 있습니다.하지만, Deque 인터페이스 구현체를 사용하는 것이 권장됩니다.왜냐하면, Stack 클래스는 내부적으로 Vector를 상속 받고 있기 때문입니다.Vector를 상속받은 Stack은 인덱스를 통한 접근, 삽입, 제거 등이 실질적으로 가능합니다.이는 후입선..
- [소프티어] GPT식 숫자 비교2025-01-22 16:55:04https://softeer.ai/practice/11001 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai해당 문제는 정렬 문제로 쉽다고 생각할 수 있지만 특정 조건들 때문에 복잡하다고 느꼇고, 커스텀 정렬을 구현해야해서 시간이 걸렸다.문제일반적인 비내림차순 정렬일 경우 sort() 메서드 한 번이면 되겠지만 아래와 같은 조건들 때문에 커스텀 정렬을 구현함 [조건]1. 소수점을 기준으로 x,y로 나누어 x1과 x2의 값이 같을 경우, y1과 y2의 크기로 정렬한다.ex) 1.11 과 1.3 인 경우 1.11 > 1.3 이다. 2. 소수점이 없는 경우 x의 값이 같으면 소수점이 있는 수가 더 크다ex) 1 과 1.0 인 경우 1 정렬 코드// [커스텀 정렬 방식]// 반환값이 양수면..
- 서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점은 무엇인가요?2025-01-22 14:09:41서버 사이드 렌더링(SSR) 은 서버 측에서 렌더링하는 방식입니다.클라이언트가 서버에 컨텐츠를 요청하면, 서버는 페이지에 필요한 데이터를 즉시 얻어와 모두 삽입하고, CSS까지 모두 적용해 렌더링 준비를 마친 HTML과 JS 코드를 응답합니다.브라우저에서는 JS 코드를 다운로드하고, HTML에 JS를 연결합니다. 이처럼 모든 데이터가 이미 HTML에 담긴 채로 브라우저에 전달되기 때문에 SEO에 유리합니다.또한 JS 코드를 다운로드 받고 실행하기 전에 사용자가 이미 렌더링된 HTML을 볼 수 있으므로, JS 다운로드를 기다려야 하는 CSR에 비해 초기 구동 속도가 빠릅니다.클라이언트 사이드 렌더링(CSR) 은 클라이언트 측에서 렌더링하는 방식입니다.클라이언트가 서버에 컨텐츠를 요청하면, 서버는 빈 뼈대만..
- [트러블 슈팅] 배포 서버 CI 자동화 적용 이후 오류 발생2025-01-22 14:07:50배포 서버 CI 자동화 적용 이후 오류가 발생했다.AWS EC2 에서 docker에 올라온 log를 확인해보니 IncorrectResultSizeDataAccessException 이 발생한 것을 확인위의 오류 내용을 보면 쿼리 결과값이 유니크하지 않아서 발생했고, 2개의 결과를 반환했다고 되어있다.이 오류는 JPA 레포지토리에서 save 메서드를 통해 데이터 저장을 하면서 발생한 예외이다. 저장하고자 하는 데이터가 db에 이미 존재를 하고 Unique 값을 포함한 데이터인데 데이터 중복이 발생하여 예외가 발생했다. IncorrectResultSizeDataAccessException 에러는 데이터 조회 시 발생하는 에러인데 왜 저장할 때 문제냐고 한다면 // 테스터 생성 코드Member memberA ..
- Connection Timeout, Socket Timeout, Read Timeout의 차이점은 무엇인가요?2025-01-21 22:08:59Connection Timeout은 클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃입니다.TCP 소켓 통신에서 클라이언트와 서버가 연결될 때, 정확한 전송을 보장하기 위해 사전에 세션을 수립하는데, 이 과정을 3-way-handshake라고 합니다.Connection Timeout은 이 3-way-handshake가 일정 시간 내에 완료되지 않을 때 발생합니다.즉, 서버의 장애나 응답 지연으로 인해 연결을 맺지 못하면 Connection Timeout이 발생합니다. Socket Timeout은 Connection Timeout 이후에 발생할 수 있는 타임아웃입니다.클라이언트와 서버가 연결된 후, 서버는 데이터를 클라이언트에게 전송합니다.이때 하나의 데이터..
- private 메서드에 @Transactional 선언하면 트랜잭션이 동작할까요?2025-01-20 12:16:17기본적으로 @Transactional, @Cacheable, @Async 등의 애너테이션은 런타임에 동작하는 Spring AOP를 기반으로 동작합니다.Spring AOP가 제공하는 JDK Dynamic Proxy, CGLIB 방식 모두 타깃이 구현하는 인터페이스나 구체 클래스를 대상으로 프록시를 만들어서 타깃 클래스의 메서드 수행 전후에 횡단 관심사에 대한 처리를 할 수 있습니다. Spring은 빈 생성시, 해당 빈에 AOP 애너테이션이 있는지 검사하고, 있다면 프록시 객체를 생성하여 빈을 대체합니다. AOP 적용 대상인 클래스의 경우, 즉, @Transactional과 같은 AOP 애너테이션이 하나라도 선언된 클래스는 프록시로 감싸집니다. JDK Dynamic Proxy의 경우 타깃 클래스가 구현하는 ..
- 리버스 프록시와 포워드 프록시의 차이점에 대해 설명해주세요.2025-01-17 10:27:41포워드 프록시(Forward Proxy)포워드 프록시는 주로 클라이언트 측에 위치하여, 사용자가 인터넷에 접근할 때 중개자 역할을 합니다.예를 들어, 회사 내부 네트워크에서 근무하는 직원이 외부 웹사이트에 접속하려고 할 때, 포워드 프록시 서버를 통해 요청이 전달됩니다. 이 과정에서 사용자의 실제 IP 주소는 숨겨지고, 프록시 서버의 IP 주소가 대신 사용됩니다.포워드 프록시의 핵심 기능 중 하나는 익명성 제공입니다. 사용자의 실제 IP를 숨김으로써 개인정보 보호와 보안 측면에서 큰 장점을 제공합니다.또한 캐싱을 통해 네트워크 성능을 향상시킵니다. 자주 요청되는 웹 페이지나 파일을 프록시 서버에 저장해두면, 동일한 요청이 다시 들어올 때 빠르게 응답할 수 있어 네트워크 대역폭을 절약할 수 있습니다. ..