반응형

전체 글 226

[프로그래머스] 12927 : 야근지수 [JAVA] Lv.3

[프로그래머스] 12927 : 야근지수 [JAVA] Lv.3 어려워 보이지만, 우선순위 큐만 사용해본 적이 있다면, 매우 쉽게 풀 수 있다. 우선은 내림차순으로 정렬해주는것이 가장중요하다. 왜냐하면 가진 업무처리 시간을 최적으로 활용하기 위해서는 남은 업무량을 큰것부터 없애는것이 가장 중요하다. 따라서 우선순위 큐를 사용하여, 모든 업무량을 넣어두고 큰 순서대로 업무를 처리하면 최종적으로 남는 업무를 모두 꺼내어 계산하면 끝난다. 문제 풀이 설명 (summary)우선순위 큐(PriorityQueue)(pq)를 사용하여, 업무량이 큰것부터 순차적으로 처리할 수 있도록 내림차순으로 정렬한다.작업시간만큼 우선순위 큐에서 큰것부터 꺼내어 count-1 해서 다시 pq에 넣어준다최종적으로 남은 pq를 모두 꺼..

[프로그래머스] 42884 : 단속카메라 [JAVA] Lv.3

[프로그래머스] 42884 : 단속카메라 [JAVA] Lv.3 1단계 : 정렬하기단속카메라 문제는 정렬하는게 가장 포인트다. 진입 지점으로 오름차순하면서 진입지점이 동일하다면, 진출 지점으로 오름차순을 하는 것이다. 예를 들어 {{2,5}, {2,4}, {3,3}, {5,8}} 가 있다고 가정하자. 우선 가장 작은 {2,5},{2,4}} 를 정렬하게 될텐데 진입 지점이 동일하므로, 진출지점으로 정렬하면 {2,4}{2,5} 가 된다. 나머지는 진입지점순서대로 정렬하면 {2,4}{2,5}{3,3}{5,8} 이 된다. 2단계 : 카메라 위치 지정하고 옮기기첫 카메라 위치는 현재 인덱스의 진출지점으로 초기화한다.첫 인덱스 진출지점은 4이므로, 현재 카메라 위치는 4가 된다.다음 인덱스 {2,5} = 진입시점 2..

[프로그래머스] 43238 : 입국심사 [JAVA] Lv.3

[프로그래머스] 43238 : 입국심사 [JAVA] Lv.3 여러번 풀어보았던 문제인데, 다시 풀게 되었을 때 막막했다. 직관적으로 접근하면 문제를 해석하려고 하면 방법이 점점 복잡해지기만 할 뿐이었다. 그래서 느낀점은 문제를 읽고서 접근방식을 잘 선택하는게 가장 우선되어야 할 문제라고 생각했다.문제에서 순차적으로 진행되지 않고 주어진 시간내에 가능한 빨리 끝나도록 하는것이 목적이기 때문에 이번 문제는 각각 심사관들은 서로 연관성이 전혀 없다. 단 총 시간이라는 조건만 동일 할 뿐이다. 주어진 시간에 몇명을 심사할 수 있는지 각각 심사관별로 계산해서 총합이 주어진 시간에 심사할 수 있는 모든 사람의 수가 결정된다. 위에 글을 보고 풀 수 있다면, 가장 좋은 방법이 될 것이고 이해하기 어렵다면, 아래에 있..

[Spring] 스프링에서 주기적 일정(Scheduler) 설정하고 실행하는 방법

Spring Scheduler로 정기 작업 자동화하기 Scheduler란?스케줄러는 일정한 시간 간격이나 특정 시간에 맞추어 자동으로 실행되는 작업(태스크)을 의미합니다. Java 기반의 Spring 프레임워크에서는 @Scheduled 어노테이션을 사용하여 스케줄러를 간편하게 구현할 수 있습니다. 구성 방법@EnableScheduling@Component@Scheduled(cron = "0 0 1 * * *") // 매일 오전 1시에 실행* 위 3가지를 설정하면 스케줄링이 실행된다. 아래 스냅샷을 통해 예시를 보세요 1. 스케쥴링 활성화// Scheduling 기능을 사용하기 위해서는 애플리케이션 진입점 또는// 설정 클래스에 @EnableScheduling을 선언해야 합니다.@SpringBootApp..

IT 정보/Spring 2025.04.16

[Docker] 도커의 기본 개념 및 용어 설명 #1

Docker 장점 이식성 : 특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행할 수 있는 특성매번 귀찮은 설치 과정을 일일이 거치지 않아도 된다.항상 일관되게 프로그램을 설치할 수 있다. (버전, 환경 설정, 옵션, 운영 체제 등)각 프로그램이 독립적인 환경에서 실행되기 때문에 프로그램 간에 서로 충돌이 일어나지 않는다. 도커 (Docker)란?컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있는 툴이다. 컨테이너 (Container)란?Docker에서 컨테이너(Container)는 하나의 컴퓨터 환경 내에서 독립적인 컴퓨터 환경을 구성해서, 프로그램을 별도로 설치할 수 있게 만든 개념이다. 컴퓨터 안에 작은 컴퓨터라고 부를 수 있고 이를 컨테이너라고 부른다. 컨테이너를 포..

IT 정보/docker 2025.04.16

[매일메일] 서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점 알아보기

개발 방식웹 애플리케이션 개발 방식에는 SSR(Server Side Rendering)과 CSR(Client Side Rendering)이라는 두 가지 대표적인 렌더링 방식이 존재합니다. 각각의 렌더링 방식은 데이터 처리 시점, 사용자 경험, SEO 최적화, 초기 로딩 속도 등에서 차이를 보이며, 개발 환경에 따라 적절히 선택되어야 합니다. 서버 사이드 렌더링 (SSR)서버 측에서 렌더링은 이름 그대로 서버에서 HTML을 렌더링한 후 브라우저에 전달하는 방식입니다. 페이지에 필요한 데이터를 즉시 가져옴HTML 구조에 데이터를 삽입CSS까지 적용된 완성된 HTML 문서를 브라우저에 응답브라우저는 전달받은 HTML을 바로 렌더링할 수 있으며, JS 파일은 이후 다운로드되어 작동합니다.장점 :SEO에 유리 :..

[매일메일] 자바스크립트는 싱글 스레드 언어인데 여러 작업 수행이 가능할까?

자바 스크립트는 싱글 스레드 언어이다. 즉, 한 번에 하나의 작업만을 처리할 수 있는 단일 콜 스택을 가집니다. 브라우저나 Node.js 환경이 제공하는 비동기 처리 메커니즘 덕분에 여러 작업을 동시에 수행할 수 있습니다.자바스크립트는 브라우저의 Web API or Node의 libuv, 이벤트 루프, 태스크 큐를 이용하여 비동기 작업을 동시에 처리합니다. 동작 메커니즘 비동기 작업이 발생하면 해당 작업(예: 타이머, 네트워크 요청 등)은 브라우저의 Web API 또는 Node.js의 백그라운드 API(libuv)에 위임된다.자바스크립트 엔진은 이 작업들을 위임한 뒤 나머지 코드를 계속 실행한다.위임된 작업이 완료되면, 콜백 함수는 태스크 큐(Task Queue)에 등록된다.이벤트 루프는 콜 스택이 비어..

[Spring] Spring Bean의 조건부 활성화/비활성화 방법 5가지

왜? 조건부로 활성화/비활성화가 필요한가?외부 라이브러리는 가져다 사용하는 경우 특정 조건에만 적용해야 할 때가 있다. 예를 들면 운영에서만 사용되는 라이브러리의 Bean이 있는 경우에 내부 개발환경에서 문제가 발생할 수 있기 때문이다. 이와 같이 여러 상황에서 Bean 등록을 통제하고 싶다면 아래와 같은 조건부 활성화/비활성화 방법을 활용하여 내가 사용할 수 있는 방법을 찾아 적용하면 된다. Spring Bean의 조건부 활성화/비활성화 방법 5가지@Profile : 프로파일 기반 조건@Conditinal : 조건부 설정의 기본@ConditionalOnProperty: 특정 프로퍼티 값 조건@ConditionalOnMissingBean, @ConditionalOnBean: Bean 존재 유무 기반@C..

IT 정보/Spring 2025.04.16

[Spring] 스프링 AOP (Spring AOP)란 무엇인가? 프록시 기반 AOP, @AOP

스프링 AOP (Aspect Oriented Programming) : 관점 지향 프로그래밍AOP는 관점 지향 프로그래밍의 약자이다.객체 지향 프로그래밍 (OOP)이 '클래스 단위'로 관심사를 분리했다면, (AOP)는 '관심사 단위'로 분리하여 횡단 관심사 (Cross-Cutting Concern)를 모듈화할 수 있게 해줍니다. 횡단 괌심사(Cross-Cutting Concern)란? 애플리케이션의 여러 모듈에 공통적으로 적용되어야 하는 기능.예: 로깅, 보안, 트랜잭션, 성능 모니터링, 예외 처리 등.이들을 비지니스 로직에서 분리하지 않으면, 코드 중복과 유지보수 어려움이 발생. 용어 정리Aspect(관점) : 공통 기능(횡단 관심사)을 모듈화 한 것. ex) 트랜잭션 처리 모듈Join Point :..

IT 정보/Spring 2025.04.15

[매일메일] @Transactional은 private 메서드에서 동작할까? — Spring AOP의 진짜 동작 원리

private 메서드에서 트랜잭션은 동작할까?-> 아니요. 동작하지 않습니다 이유 1. Spring AOP는 프록시 기반이며, private 메서드는 프록시가 가로챌 수 없습니다.Spring AOP는 런타임에 프롤시 객체를 생성하여 부가기능(transactional, @Cashable, @Async)을 적용합니다.JDK 동적 프록시는 인터페이스 기반의 public 메서드에만 적용됩니다.CGLIB 프록시는 클래스 상속 기반으로 public, protected, package-private 까지만 적용됩니다.즉, private 메서드는 대상이 되지 않습니다. 이유 2 .Self-invocation 문제 (같은 클래스 내부 호출)클래스 내에서 자신의 메서드를 호출하면, 프록시를 거치지 않고 직접 호출됩니다.이..

반응형