전체 글
-
[Java] OOME, JVM8 메모리Programming/Java 2024. 2. 29. 17:28
out of memory error 힙 메모리에서 발생하는 메모리 에러 OOME가 발생하는 시점은 대부분 개발이 완료된 후 사용자 테스트 및 인수 테스트 단계에서 많이 발생한다. 즉, 개발 단계에서 수행하는 단위 테스트의 경우 목적 기능에 대한 검중 위주로 진행되기 때문에 식별이 어렵고 가동 초기 단계 혹은 이와 유사한 테스트 환경에서 주로 발생하게 되는 것이다. OOME가 발생한 시점에 빠르게 대응해야 하는데 JVM Option을 통한 처리 방법과 Dump파일 분석을 통해 대응하게 된다. Java의 Reflaction기능을 이용하거나 Spring같은 프레임워크를 사용하는 경우 메모리를 고려하여 설계해야 한다. OOME 케이스 java.lang.OutOfMemoryError: Java Heap Space..
-
[Java] Spring 빌드 Jar, WarProgramming/Java 2024. 2. 29. 00:26
Spring 프레임워크를 빌드하면 나오는 실행 파일 포맷은 Jar, War 두가지이다. Gradle, Maven 같은 빌드 도구를 사용하여 빌드하면 하나의 산출물인 Jar, War파일이 생성된다. Jar파일은 JVM위에서 실행되지만, War파일은 WAS위에서 실행된다. Jar -> SpringBoot를 사용하는 경우 War -> JSP만으로 이루어져 있거나, 외부 WAS를 사용할 경우 사용하거나 필요에 맞게 배포(패키지)포맷을 정하면 된다. ● 외장 WAS를 사용하는 환경이라면 war배포 ● 내장 WAS를 써야하는 환경이라면 jar배포 ● jar와 달리 war는 WEB-INF 및 META-INF 디렉토리로 사전 정의된 구조를 사용하며, WAR파일을 실행하려면 Tomcat, Weblogic, Websphe..
-
[Java] Garbage CollectionProgramming/Java 2024. 2. 28. 01:36
GC JVM내에서 메모리 관리를 해주는 것. 쓰지 않는 객체(힙 메모리 객체가 null)인 경우 가비지 컬렉터의 대상이 된다. 사용자가 동적으로 생성한 객체가 있는 영역인 Heap메모리에서 동작한다. C++에서는 Heap영역의 메모리를 사용하기 위해 동적 메모리 영역을 할당 받고 해제하는 과정을 개발자가 직접 해야한다(메모리를 수동으로 직접 관리) → 메모리 영역을 할당 받고 해제하지 않으면 메모리 누수가 발생할 수 있고, 이미 해제한 메모리 영역을 또 해제하면 에러가 발생할 수 있다. → Java에서는 동적 메모리 영역(힙 메모리)를 GC가 관리하여 에러 발생 요인을 방지할 수 있다. GC를 수행하게 되면 GC를 수행하는 스레드를 제외한 모든 스레드가 중지된다. → 이것을 stop-the-world라고..
-
[Java] String 클래스Programming/Java 2024. 2. 6. 19:28
String public final class String extends Object implements Serializable, Comparable, CharSequence String 클래스는 final로 선언되어 있다. String 클래스는 자식 클래스를 양산할 수 없다. 모든 클래스의 부모 클래스인 Object클래스를 확장했다. - Serializable 인터페이스 : 구현해야 하는 메소드가 하나도 없는 특이한 인터페이스 - Comparable 인터페이스 : compareTo()메소드 하나만 선언되어 있다. - CharSequence 인터페이스 : 문자열을 다루기 위한 클래스 - StringBuilder, StringBuffer 클래스도 CharSequence인터페이스를 구현해 놓았다. 불변한 객..
-
[Git] github 계정 여러개 사용Github 2024. 1. 5. 02:15
작업 중인 PC에서 github 계정을 여러 개 사용하고 싶었습니다. global 등록된 user.name 과 user.email이 있었기에 다른 계정으로 push가 되지 않는 문제가 있었습니다. 이를 해결하기 위해 한 PC에서 여러 개의 github계정을 사용하는 방법을 포스팅하겠습니다. Config config --global github를 처음 사용할 때 global config 정보인 user.name과 user.email을 등록하게 됩니다. $ git config --global user.name "name" $ git config --global user.email "email@example.com" $ git config --list 이 config는 "~/.gitconfig"에 저장되고 g..
-
[보안] 대칭키 공개키Computer Science/Security 2024. 1. 3. 17:34
대칭키 암복호화에 사용하는 키가 동일한 암호화 방식입니다. 공개키에 비해 속도는 빠르지만 키를 교환해야 한다는 문제가 있습니다.(키 배송 문제) 키를 교환하는 중 키가 탈취될 수 있는 문제가 있고, 사람이 증가할 수록 전부 따로 키 교환을 해야하기 때문에 관리해야할 키의 수가 증가합니다. 키 배송 문제를 해결하기 위한 방법에는 몇 가지가 있습니다. 1. 키의 사전 공유에 의한 해결 키 관리기관(TA, trusted authority)이 사전에 임의의 두 사용자(A, B)에게 비밀 경로를 통하여 임의 키를 선택하여 전달하는 방법입니다. 이 방법은 일반적으로 TA와 네트워크 상의 모든 사용자 사이에 안전한 통로가 필요하며, 사용자가 많은 경우에 TA는 물론 사용자들도 많은 키를 관리해야 하는 문제점이 있습니..
-
[백준] 1991번 트리 순회 c++Coding Test/BaekJoon 2023. 12. 13. 10:54
문제 설명 문제 바로가기 제한 사항 시간 제한 : 2초 메모리 제한 : 128MB 풀이 #include #include #include #include using namespace std; int arr[2][27]; void preOrder(int x, string& str) { if (x < 0) { return; } str.push_back(x + 'A'); preOrder(arr[0][x], str); preOrder(arr[1][x], str); } void inOrder(int x, string& str) { if (x < 0) { return; } inOrder(arr[0][x], str); str.push_back(x + 65); inOrder(arr[1][x], str); } void p..
-
[CS] HTTP HTTP/2 HTTPS QUICComputer Science/CS 2023. 12. 7. 19:05
HTTP Hypertext Transfer Protocol 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜입니다. 사용자가 웹 사이트를 방문하면 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 HTTP 응답으로 응답합니다. 웹 서버와 사용자 브라우저는 데이터를 일반 텍스트로 교환합니다. 간단히 말해 HTTP 프로토콜은 네트워크 통신을 작동하게 하는 기본 기술입니다. HTTP특징 ● Stateless(무상태) : 서버가 클라이언트의 상태를 보존하지 않음 ▷ 장점 : 서버 확장성 높음(응답 서버를 바꿀 수 있고 무한한 서버 증설 가능) ▷ 단점 : 클라이언트가 추가 데이터 전송 ▷ 상태 유지는 쿠키나 세션 사용 → 쿠키, 세션, 토큰을 사용해서 상태를 기억할 수 있다. 상태를..