전체 글

    [Web] WAS란? 동적 / 정적 콘텐츠, Tomcat 요청 처리 과정

    0. 정적 - 동적 컨텐츠와 Web Server - WAS - 정적 컨텐츠 (Static Contents) • 요청 받은 파일 경로에 따라 항상 동일한 file contents를 반환 • ex) index.html, cat.jpg, style.css, hello.js • Web Server는 정적 컨텐츠를 반환한다 (대표적인 Web Server 종류 : Apache, Nginx 등) - 동적 컨텐츠 (Dynamic Contents) • 파라미터의 내용에 맞는 동적인 contents(프로그램의 결과물)를 반환 • WAS는 DB 조회, 로직 처리 등의 프로그램을 통해 처리한 동적 컨텐츠를 반환한다 (대표적인 WAS 종류 : Tomcat) 1. WAS 란? Web Application Server - DB 조..

    [Java] Reflection API 알아보기

    런타임 단계에서 클래스 정보를 알아야 할 때 사용하기 좋은 도구인 Reflection API에 대해 알아보자! 0. 왜 필요할까? public static void main(String[] args) { Object obj = new Hello(); obj.main(); // Error } - 자바는 컴파일 시점에 타입을 결정 - Object 타입인 obj는 Hello 객체를 받아도 main 메서드를 실행할 수 없다 - 이런 경우에 Reflection API를 이용해, 런타임에 클래스의 이름만으로 클래스를 로딩하여 멤버를 사용할 수 있다! 1. Reflection API란? -구체적인 클래스 타입을 알지 못해도 클래스의 정보(메서드, 타입, 변수 등)에 접근할 수 있게 해주는 Java API • java..

    [Java] JVM 구조와 메모리 영역

    1. JVM 구조 1.1. 클래스 로더 (Class Loader) - JVM 내로 클래스파일 (.class) 을 동적으로 로드 - 링크를 통해 메모리에 바이트코드를 배치 • 메모리에 로딩할 때, 모든 코드를 한번에 올리는 것이 아니라 어플리케이션에서 필요한 경우 동적으로 로딩 1.2. 실행 엔진 (Execution Engine) - 메모리에 로딩된 바이트 코드를 기계어(Binary Code)로 변경하여 명령어 단위로 실행 - 인터프리터(Interpreter)와 JIT(Just-In-Time) 컴파일러 두 가지 방식을 혼합하여 사용 • Interpreter : 명령어를 하나씩 실행 • JIT : 바이트 코드 전체를 컴파일하여 Native Code로 변경하여 캐싱해 두었다가 실행 - GC (Garbage C..

    [BOJ / 백준] 2933번 미네랄 파이썬(Python) 문제 풀이

    문제 문제 링크 : https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 풀이 💡 idea 1. 왼쪽 → 오른쪽 / 오른쪽 → 왼쪽 순서에 맞게 미네랄을 파괴한다 2. 파괴한 미네랄의 인접한 미네랄 덩어리(클러스터)를 찾아 떠있는 상태인지 확인한다 - 파괴한 미네랄과 인접 미네랄 : 파괴 이전에 같은 클러스터 3. 해당 클러스터가 떠있는 상태라면 떨어뜨리기! - 위 그림에서 보라색 미네랄이 파괴되었을 때, 오른쪽과 같이 인접해있는 파란색 미네랄 덩어리(클러스터)가..

    [Java] 자바 실행 환경 JDK / JRE / JVM

    0. Java 코드 실행 과정 컴파일러, 명령어, 프로세서 필요 → JDK (JRE / JVM 포함) 설치 필요 1. JDK Java Development Kit - Java 프로그램을 개발하는 데 필요한 툴을 모아놓은 소프트웨어 패키지 - JRE, 컴파일러(javac 등), 디버거 등을 포함하는 프로그램 - JDK를 설치하면 PC에 설치되는 것 : JVM, API, TOOL(명령어) - OpenJDK, (유료) OracleJDK 2. JRE Java Runtime Environment - 자바 실행 환경 - JVM을 사용하기 위한 각종 자바 라이브러리를 담고 있다 3. JVM Java Virtual Machine - 자바 프로그램을 구동해주는 프로세서 - 자바 프로그램이 컴파일된 형태인 바이트 코드를 ..

    [Java] 자바 플랫폼 종류 (Java SE / EE / ME)

    1. 자바 플랫폼 이란? : 자바 프로그램을 개발 및 관리하기 위한 환경 - 구성 : Java 언어, Java 패키지, JVM(Java Virtual Machine) 2. 자바 플랫폼의 종류 1. Java SE (Standard Edition) - 가장 대중적인 자바 플랫폼. 자바 프로그래밍 언어 핵심 기능들을 제공 - 흔히 자바 언어라고 하는 대부분 패키지 포함 ( java.lang.* , java.io.* , java.util.* 등) - 데스크톱 응용 소프트웨어 개발에 사용된다 2. Java EE (Enterprise Edition) - 자바 SE 기반으로 그 위에 탑재 - 대규모, 다계층, 신뢰성, 보안 네트워킹 애플리케이션 개발 및 실행을 위한 API 및 환경 제공 - 웹 기반 응용 소프트웨어 ..

    [프로그래머스] H-Index Python 풀이

    문제 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE def solution(citations): h_idx = 0 citations.sort(reverse=True) for i in range(len(citations)): if citations[i] > h_idx: h_idx = i + 1 else: break return h_idx 풀이 💡 idea 1. citations를 역순 정렬 2. 가장 인용 횟수가 많은 논..

    [프로그래머스] 가장 큰 수 Python 문제 풀이

    문제 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE def solution(numbers): answer = '' nums = list(map(str, numbers)) nums.sort(key=lambda x : x * 3, reverse=True) answer = ''.join(nums) return str(int(answer)) 풀이 💡 idea ❌ permutations 조합을 이용한 모든 수 계산 → numbe..

    [Clean Code] 3장 함수

    3. 함수 어떤 프로그램이든 가장 기본적인 단위는 함수 이 장에서는 함수를 잘 만드는 법을 소개 [ 작게 만들어라! ] - 함수를 만드는 첫째 규칙도 둘째 규칙도 ‘작게!’ - 저자가 이야기 해주는 한 자바 / 스윙 프로그램 • 각 함수가 너무도 명백 • 각 함수가 이야기 하나를 표현 • 각 함수가 멋지게 다음 무대를 준비 ▶︎ 블록과 들여쓰기 - if / else문, while문 등에 들어가는 블록은 한 줄이어야 한다 • 대게 그 한 줄에서 함수를 호출한다 - 바깥을 감싸는 함수가 작아진다 - 호출하는 함수의 이름을 적절히 짓는다면, 코드를 이해하기도 쉬워진다 - 중첩 구조가 생길만큼 함수가 커져서는 안된다 [ 한 가지만 해라! ] - 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한..

    [Clean Code] 2장 의미 있는 이름

    2. 의미 있는 이름 [ 의도를 분명하게 이름을 지으라 ] - 변수 / 함수 / 클래스 이름은 다음 질문에 모두 답해야 한다 • 변수의 존재 이유는? 수행 기능은? 사용 방법은? - 코드의 함축성 • 코드는 단순하지만 코드 맥락이 코드 자체에 명시적으로 드러나지 않는다 • 단순히 이름만 고침으로써 함수가 하는 일을 이해하기 쉬워질 수 있다 [ 그릇된 정보를 피하라 ] - 코드의 의미를 흐리는 그릇된 단서를 코드에 남겨선 안된다 • ex. 실제 List가 아닌데 accountList라 명명하지 않는다 - 널리 쓰이는 의미가 있는 단어를 다른 의미를 사용 ❌ - 서로 흡사한 이름을 사용하지 않도록 주의 - 유사한 개념은 유사한 표기법 사용 : 일관성 • 대부분 개발자는 이름만 보고 객체 선택 • 최신 자바 ..