분류 전체보기 30

JVM에 대해 알아보자!

지난 포스팅 중에 자바 컴파일 과정에 대해 알아보았습니다. 자바 컴파일러에 의해 변환된 .class파일 (바이트 코드)이 클래스 로더에 의해 JVM 내에 들어와 메모리 공간을 만들어주고 컴퓨터가 이해할 수 있는 기계어로 만들어준다고 했습니다. 결국엔, JVM 안에서 메모리도 만들고, 기계어로 변환도 해주고 여러 역할을 수행하게 됩니다. 그래서 JVM이 무엇이냐? Java Virtual Machine의 약자로서, 자바 바이트코드를 실행할 수 있는 주체입니다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현됩니다. 출처 : 위키백과 쉽게 말해서, JVM은 우리들이 작성한 자바 프로그램이 수행되는 프로세스를 의미합니다. 다시 말해서, java라는 명령어를 ..

Java 2021.08.11

HTTPS란 무엇일까?

AWS EC2를 사용하여 웹 사이트를 만들어보았지만, http 프로토콜로 밖에 접속을 못하다 보니, 주의를 요한다는 텍스트가 계속해서 나온다. 실은 이 웹 사이트는 보안적으로 취약하다고 볼 수 있는데, 그 이유는 클라이언트와 서버가 계속 정보를 주고 받는 웹 사이트의 경우 제3자가 이에 대한 정보를 볼 수 있기 때문이다. 해당 웹 사이트는 민감한 정보를 담고 있지 않은 웹사이트이지만, 내 아이디와 비밀번호를 누군가가 알게 될 수도 있다는 건 매우 안 좋은 상황일 것이다. 그래서, HTTP에서 secure의 의미가 들어간 HTTPS를 적용해야 한다. 여기서 S의 풀네임은 Over Secure Socket Layer이다. 그렇다면, HTTPS는 HTTP에 비해 무엇이 다르고 어떻게 안전한 것일까? HTTPS..

Web 2021.08.04

스프링 삼각형! IoC와 DI를 이해해보자

IoC와 DI는 스프링의 3대 프로그래밍 모델의 한 부분을 차지하는 개념입니다. 위 그림처럼, Plain Old Java Object(POJO)를 기반으로 IoC/DI, AOP, PSA 개념들이 삼각형으로 이루고 있어, 이를 스프링 삼각형이라고 부릅니다. POJO는 프레임워크의 도움 없이도 돌아가는 순수 자바 객체를 말합니다. 여기서 IOC와 DI를 항상 IOC/DI라고 표기하는데, 같은 개념으로 이해하는 경우가 많습니다. (저도 스프링을 처음 접할땐 그랬습니다...) 하지만, 엄연히 말하자면 같은 개념은 아닙니다. 같은 개념은 아니지만 뗄 수 없는 관계인 IOC와 DI 그럼, 이 둘은 어떻게 다른지 또 어떤 관계인지 알아보겠습니다. DI에 대하여 Dependency Injection : 의존성 주입 I..

Spring 2021.08.01

자바의 컴파일 과정을 이해해보자

자바의 호환성 자바의 컴파일 과정을 알기 전에, 우선 자바의 장점 한가지를 다루고 시작하겠습니다. 자바는 C언어와 다르게 각 OS별 컴파일러 없이 하나의 컴파일러로 모든 OS를 지원하는 특징을 가지고 있습니다. 예를 들어, C언어로 소스를 짜고 맥OS에 실행시키려면 맥용 C컴파일러가 필요하고 윈도우OS에 실행시키려면 윈도우용 C컴파일러가 필요한거죠. 물론, 이전 기종 마다 소스 파일을 짜야했던 어셈블리어와 기계어에 비하면 C언어는 소스 파일 하나만 짜면 되는 편리함을 가지고 있습니다. C언어는 One Source Multi Object Use Anywhere의 모토를 가지고 있죠. 하나의 소스로 각 기기에 맞는 목적 파일을 만들어 어디든 사용 가능하다. 하지만, 자바는 Write Once Use Anyw..

Java 2021.07.30

[LeetCode] 559. Maximum Depth of N-ary Tree (easy)

https://leetcode.com/problems/maximum-depth-of-n-ary-tree/ Maximum Depth of N-ary Tree - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com Point1 . 이진트리의 최대 높이를 구하는 문제이다. Point2. The maximum depth is the number of nodes along the longest path from the root node down to the farthest l..

Algorithm 2021.07.22

[LeetCode] 136. Single Number (easy)

https://leetcode.com/problems/single-number/ Single Number - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 비트 연산에 관한 문제이다. 난이도는 easy. 짝이 주어진 배열에서 하나만 짝이 없는 수를 추출하라는 문제다. [4, 1, 2, 1, 2]라는 배열이 있을 때, 답은 4가 된다. 이 문제의 포인트는 You must implement a solution with a linear runtime complexit..

Algorithm 2021.07.21

WARNING: An illegal reflective access operation has occurred 해결 방법

@Test @DisplayName("로그인 컨트롤러 진입 테스트") void loginSuccess() throws Exception { MultiValueMap map = new LinkedMultiValueMap(); map.add("id", "test"); map.add("password", "1234"); mockMvc.perform(post("/users/login") .params(map)) .andExpect(status().isOk()) .andDo(print()); } 단순히, 로그인 컨트롤러에 접근 가능한지 테스트를 하고 있었다. 테스를 돌려보니, 아래와 같은 경고가 떴다. 테스트는 성공했기에, 큰 문제는 아닌 것 같았지만 빨간색 글씨로 illegal access 란 문구가 매우 거슬렸..

Spring 2021.07.14

빅오 표기법(Big O)의 이해 - 시간 복잡도

알고리즘을 풀면서 시간 복잡도에 대한 개념은 자주 나온다. O(n), O(log n), O(log n^2),...등등 실제로 문제 풀이에 있어서 큰 영향을 미치지 않는다고 생각했지만, 점차 문제가 어려워짐에 따라 문제는 맞았을지 몰라도, 효율성 테스트에서 낮은 점수를 맞곤 하였다. 알고리즘은 효율성의 싸움이기도 하니, 알고리즘 문제 풀 때, 최대한 효율적으로 짜기 위해 시간 복잡도를 나타내는 빅오 표기법에 대해 이해해보려 한다. 1. O(1) 오원은 배열의 요소를 참조하는 알고리즘의 시간 복잡도를 나타낸다. 입력된 데이터의 크기와 상관 없이 항상 일정한 시간이 걸리는 알고리즘이기 때문이다. 2. O(n) 오엔은 순차탐색 알고리즘의 시간 복잡도를 나타낸다. F(int[] n) { (for i = 0 to ..

Algorithm 2021.07.08

[프로그래머스] N개의 최소공배수 - 2단계

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 해설 : 이 문제는 최대공약수와 최소공배수 구하는 방법을 모두 알고 있어야 풀이가 가능한 문제이다. 과거 2개의 수만 주어지는 최소공배수와 최대공약수 구하는 문제가 떠올랐긴 했지만, 여러 요소가 존재하는 배열이 주어지니깐 어떻게 풀어야 할지 감이 잘 오지 않았다. 결국엔, 앞 요소와 바로 뒷 요소를 선택하..

Algorithm 2021.07.08

Gradle이란 무엇인가?

Gradle == 빌드 도구 위키백과에 대략적으로 서술된 내용을 보면, 그레이들은 Groovy를 이용한 빌드 자동화 시스템이다. 그럼 Groovy는 무엇인가? JVM에서 실행되는 스크립트 언어이며, Java와 문법이 아주 비슷하고, Java와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다. 저렇게, dependencies 안에 포함된 코드들로 외부 의존성들을 주입할 수 있다. 빌드 자동화의 목적은 개발자가 반복적으로 해야 하는 코딩을 잘 짜여진 프로세스를 통해 자동으로 실행하며, 믿을 수 있는 결과물도 생산해 낼 수 있는 일련의 작업방식 및 방법을 말한다. 다시 말해, - 빠른 기간 동안 계속해서 늘어나는 라이브러리의 추가와 - 프로젝트를 진행하며 라이브러리의 버전을 쉽..

Spring 2021.07.07