본문 바로가기

분류 전체보기

(125)
[Numble] 챌린지 회고록 프로젝트 소개 동물에 관한 짧은 영상을 올리는 숏폼을 주제로 자신의 반려동물을 자랑하고 싶은 사람 혹은 반려동물을 키우고 싶지만 여건이 되지 않는 사람들을 위해 영상을 직접 올리거나 모아둘 수 있는 서비스를 기획했습니다. 역할 담당 CI & CD, 인프라 구축 및 동영상, 댓글, 댓글 좋아요 API를 담당했습니다. Gtihub: https://github.com/Numble3/Paws-Backend 활용한 라이브러리와 그 이유 ffmpeg라는 오픈소스 이미지, 동영상 압축 라이브러리를 사용했습니다. https://www.ffmpeg.org/ FFmpeg Converting video and audio has never been so easy. $ ffmpeg -i input.mp4 output.avi N..
모니터와 락에 대하여 자바에선 자체적으로 동기화 메커니즘을 지원한다. C언어와는 달리 언어 자체에서 지원하는 잠금이 있는건 특이했다. 사전지식 잠금 방식에 따른 구분 Busy - Wait: CPU 자원을 소모하면서 락을 얻을 때까지 대기함. Block and Wakeup: 임계 영역에 들어가면, 프로세스 상태가 wait 상태로 변하며, 자원을 얻을 때까지 대기함. 모니터란 ? 모니터란 자바에서 지원하는 락 방법 중 하나이다. synchronized 키워드를 붙여 구현할 수 있으며, 클래스, 메서드에 붙일 수 있다. 각각을 살펴보면, 클래스에 붙인 경우 인스턴스 자체가 동기화되므로, 오직 하나의 스레드만이 인스턴스에 접근할 수 있다. 메서드에 붙인 경우 해당 메서드를 실행할 때 오직 하나의 스레드만이 실행할 수 있다. 동작 방..
[클라우드 컴퓨팅 첫 걸음] 클라우드 컴퓨팅 핵심 개념 코드프레소 Java 웹 개발 체험단 활동 중 코드프레소 이러닝 강의 수강 - Spring Boot 웹 개발 입문 코드프레소 URL: https://www.codepresso.kr/ 비효율적인 전통적 자원관리 비즈니스에서 IT 기술 및 자원은 중요 전통적인 IT 자원 관리는 비효율적 전통적 IT 자원 관리 클라우드를 도입하게 되면 위의 전 과정을 대신 해주기 때문에 편리 넷플릭스 또한 글로벌 진출의 배경이 클라우드 도입 Summary Cloud Computing은 현재 가장 Hot한 기술 Cloud의 도입은 기업으로 하여금 사업의 본질에 집중할 수 있게 함 기업은 경영의 효율성을 극대화하기 위해 Cloud를 도입 Cloud Computing 이란? 인터넷을 통해 가상화 된 컴퓨터의 IT 리소스를 제공하는 ..
쿠키와 세션의 차이 웹에서 사용자 인증에 주로 사용되는 쿠키와 세션의 차이를 비교하는 글이다. HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다. 쿠키란? 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조 클라이언트에 300개까지 쿠키저장 가능, 하나의 도메인당 20개의 값만 가질 수 있음, 하나의 쿠키값은 4KB까지 저장 Response Header에 Set-Coo..
파이썬 PriorityQueue vs heapq 속도 분석 가운데를 말해요 문제를 풀던 도중 시간 초과의 이유를 모르겠어서 정답을 봤는데 heapq로 푼걸 확인할 수 있었다. 내가 사용한 라이브러리는 PriorityQueue였는데, 직접 속도 차이를 비교해봤다. from queue import PriorityQueue import heapq import time import random N = 100000 arr = [random.randint(1, 1000) for _ in range(N)] minq = PriorityQueue() for x in arr: minq.put((x, x)) start = time.time() while not minq.empty(): minq.get() end = time.time() print("Priority Queue:", ..
리플렉션에 대하여 리플렉션이란 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 말한다. 왜 리플렉션을 사용하는가? 리플렉션은 애플리케이션 개발보다는 프레임워크, 라이브러리에서 많이 사용된다. 프레임워크, 라이브러리는 사용하는 사람이 어떤 클래스를 만들지 모른다. 이럴 때 동적으로 해결해주기 위해 리플렉션을 사용한다. 대표적인 사용 예로는 스프링의 DI, Proxy, ModelMapper 등이 있다. 구체적인 클래스를 모르는데, 어떻게 접근할 수 있는가? 자바의 클래스 파일들은 바이트코드로 컴파일되어 static과 함께 method 영역에 저장되므로 클래스 이름만 알면 클래스의정보를 찾을 수 있다. 예시 @Controller @RequestMapping("/..
Spring Boot 웹 개발 초급 코드프레소 Java 웹 개발 체험단 활동 중 코드프레소 이러닝 강의 수강 - Spring Boot 웹 개발 입문 코드프레소 URL: https://www.codepresso.kr/ 계층형 아키텍처 - Data Access Layer Data Access Layer Database에 접근하여 데이터 저장, 조회 등을 수행하는 역할 Service와 Database 사이의 추상화된 계층 Database 기술이 변경되면 Data Access Layer의 코드는 변경될 수 있지만, Service 계층의 코드는 변경되지 않는다 데이터를 접근하기 위한 기술 JDBC (Java Database Connectivity) Database에 접근하기 위한 Java의 표준 API JDBC Template JDBC를 효율적으로..
[처음 시작하는 SQL 프로그래밍] SQL 명령어를 이용한 데이터 조회 코드프레소 Java 웹 개발 체험단 활동 중 코드프레소 이러닝 강의 수강 - Spring Boot 웹 개발 입문 코드프레소 URL: https://www.codepresso.kr/ 데이터 정렬 특정 컬럼을 기준으로 내림차순 또는 오름차순으로 정렬이 가능함 ORDER BY 명령어 사용 1개 이상의 정렬 조건을 조합 가능 ASC(오름차순), DESC(내림차순) 을 명시할 수 있으며, default는 오름차순으로 정렬됨 정렬 기준 2개 정렬 기준을 복수로 설정할 수 있음 정렬의 우선순위를 따라 순차대로 적으면 됨 데이터 정렬과 필터링 조건을 명시하여 조회한 결과를 정렬함 WHERE 절과 ORDER BY 절을 결합하여 사용함 WHERE 절을 먼저 적어서 조건을 설정하고, ORDER BY를 그 뒤에 적어 정렬 조..
Enum에 대하여 자바의 Enum은 다른 언어들과는 다르게 클래스 형태로 관리된다. 상수의 의미를 담고 있지만 단순히 상수를 넘어, 상태와 행위를 스스로 관리하는 객체지향의 의미로 확장된 클래스로 볼 수 있다. 기본 사용법은 다음과 같다. public enum MENU{ PIZZA, COLLA //각각 0, 1의 상수로 관리된다. } 그런데 특이하게도 상수를 싱글톤 객체로 관리한다. 즉, 상수와 함께 다른 프로퍼티들을 넣을 수 있다. 다음 예시를 보자. public enum Menu{ PIZZA("피자"), COLLA("콜라"), MARATANG("마라탕") private final String menuName; Menu(String menuName){ this.menuName = menuName; } } 상수 옆에 문자..
제네릭에 대하여 제네릭을 소개하기에 앞서 왜 쓰는지부터 파악해보자. 컴파일 단계에 형이 다르면 컴파일을 중지하고 에러를 반환하는걸 강타입 언어, 그렇지 않은걸 약타입 언어라 한다. 자바는 강타입 언어이다. 그런데 열심히 클래스를 설계하고 보니 int형만 처리하는게 아닌 double, 심지어 객체까지도 처리해야하는 상황이 생기면 각 타입마다 메서드를 새로 만들어야 할 것이다. 코드의 중복은 최악이다. 따라서 이를 해결하기 위해 제네릭이란걸 만들었다. 제네릭은 무엇인가 제네릭의 사전적 의미는 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법이다. 예를 들어 List 클래스는 Integer, Double 상관없이 받을 수 있다. 그렇다면 아무거나 상관없이 받는게 제일 좋은거 아닌..