프로그래밍 175

[Java] 자바 자료형(primitive, reference) 에 대한 고찰 - 자바 Integer에 캐시가 있다고?

자바 자료형에 대한 고찰 - 자바 Integer의 캐시기능 참조링크 원문: https://medium.com/@njnareshjoshi/java-integer-cache-why-integer-valueof-127-integer-valueof-127-is-true-e5076824a3d5 Java Integer Cache — Why Integer.valueOf(127) == Integer.valueOf(127) Is True posted by Naresh Joshi on November 25, 2018 medium.com https://nulpointerexception.com/2018/01/06/int-vs-integer-java-application-memory-usage/ 초반부 내용은 다음 원문을 번..

[Docker] Docker의 이미지 변조를 막는 원리 - Docker Content Trust

Docker Content Trust Docker는 Docker Content Trust (DCT)라는 기능으로 악의를 가진 제3자의 행동들로 부터 사용자를 보호한다. https://docs.docker.com/engine/security/trust/content_trust/ Content trust in Docker When transferring data among networked systems, trust is a central concern. In particular, when communicating over an untrusted medium such as the internet, it is critical to ensure the integrity... docs.docker.com Dock..

[JDBC] MySQL 드라이버 Class.forName()의 비밀 - 로드만 했을 뿐인데 getConnection()이 가능하다고?

도대체 JDBC드라이버는 Class.forName()으로 로딩만 했을 뿐인데 어떻게 DriverManager 에서 사용이 되는 것일까? Class.forName의 호출 Class 클래스는 JVM에서 동작할 클래스들의 정보를 묘사하기 위한 일종의 메타 클래스이다. 객체의 참조 카운트가 0가 되면 해당 인스턴스는 더 이상 가리키는 참조 변수가 없는 것이므로 GC의 대상이 된다. 그런데 JDBC는 생성시키고 끝난다. 그러면 GC가 되지 않도록 하는 무언가가 있다고 한다. JDBC 드라이버와 같이 인스턴스를 별도로 관리하지 않는 대부분의 클래스의 경우, 그 클래스가 스스로의 인스턴스를 정적 블록을 통해 생성하고 관리한다. 정적 블록을 갖는 클래스들은 Class.forName() 만 호출해도 초기화가 수행된다. ..

객체 지향이란 무엇인가 - 절차지향과의 차이점

객체지향 개념 간단 정리 본 내용은 "개발자가 반드시 정복해야할 객체 지향과 디자인 패턴 - 최범균" 을 읽으며 정리한 내용입니다. 1. 절차 지향과 객체 지향 1.1 절차지향 절차지향이란 프로시져(procedure)로 프로그램을 구성하는 기법이다. 프로시져는 대체로 데이터를 중심으로 구현한다. 단점은 데이터 타입이나 의미를 변경해야 할 때, 함께 수정해야 하는 프로시저가 증가하는 것이다. 1.2 객체 지향 객체는 자신만의 데이터와 프로시져를 갖는다. 객체는 자신만이 기능을 제공하며, 각 객체들은 서로 연결되어 다른 객체가 제공하는 기능을 사용할 수 있다. 2. 객체 2.1 객체의 핵심은 기능을 제공하는 것 객체 지향의 가장 기본은 객체이다. 예를들어, 소리 크기 제어 객체가 있다고 생각하면 이 객체가 ..

프로그래밍 2019.05.15

[AssertJ] JUnit과 같이 쓰기 좋은 AssertJ 필수 부분 정리

AssertJ가 core document를 새로운 github.io로 이전했네요 :) . 본 글은 AssertJ 공식 문서를 핵심 챕터를 선정하여 번역하며 정리한 글 입니다. http://joel-costigliola.github.io/assertj/assertj-core.html AssertJ란 무엇인가 AssertJ는 많은 assertion(직역: 주장, 행사)을 제공하는 자바 라이브러리이다. 에러 메세지와 테스트 코드의 가독성을 매우 높여주고 각자 좋아하는 IDE에서 쓰기 굉장히 쉽다. junit에서 제공하는 assertEquals에 비해 훨씬 가독성이 올라간다. junit의 assertEquals의 인자순서는 헷갈릴 가능성이 크다. assertEquals(expected, actual); asse..

[JUnit5 개요] Meta 애노테이션과 Assumption, test 실행 순서에 대해

JUnit5 개요 JUnit5 User Guide Junit 공식 문서를 보며 정리해 보았다. 각 챕터 번호는 해당 공식 문서에 매칭되는 번호이다. https://junit.org/junit5/docs/current/user-guide/#overview-what-is-junit-5 1.1 JUnit5란 무엇인가 JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform : JVM에서 돌아가는 테스트 프레임워크이다. 테스트 엔진 API 으로도 정의되며 더욱이 Gradle과 Maven, JUnit4의 빌드 플러그인을 만들 수 있고 커맨드 라인에서 돌아가는 콘솔 런쳐를 제공한다. JUnit Jupiter : JUnit5에서의 테스트 작성을 위..

[넥스터즈] 서버 개발 일지 - Nginx 적용기, Nginx 정규식 적용과 기타 주요 내용

Nginx더 적은 자원으로 빠르게 서비스할 수 있는 웹 서버로 우리 프로젝트에 적용할 웹서버이다. 엔진엑스는 하나의 마스터 프로세스(master process)와 워커 프로세스(worker process)를 가지고 있다. 마스터 프로세스는 설정들을 읽고 워커 프로세스들을 관리한다. 워커 프로세스는 실제로 요청들을 처리하는 프로세스이다. 워커 프로세스들의 숫자는 사용가능한 CPU 코어수에 맞춘다.ps -ax | grep nginxrunning 중인 모든 엔진엑스 프로세스를 보여준다.정적 content 관리/data/www 라는 디렉터리를 만들었다고 하면 그 곳에 index.html을 놓아보자.http { server { } }이미 nginx를 설치를 한다면 디폴트로 주석이 달린 블럭들이 있는데 그것을 활용..

[Nexters]넥스터즈 (URL 단축팀) 활동 - 서버간 통신 gRPC 적용기

gRPC 적용 내용의존성 추가먼저 의존성 추가를 하는데 이렇게 3가지가 들어간다. io.grpc grpc-netty-shaded 1.18.0 io.grpc grpc-protobuf 1.18.0 io.grpc grpc-stub 1.18.0 그리고 컴파일러또한 의존성에 추가해준다. 출처 : grpc 공식 repo 그러면 proto 파일들의 기본 경로가 java폴더와 같은 level에 잡히게 된다. proto 파일의 정의그리고 이 폴더안에 .proto라는 파일을 만들어주게 되는데 자세한 내용은 이 쪽을 참고하였다. 출처 : protobuf from google 이 프로토버프 파일은 언어의 제약이 없다. (거의) 즉 이것의 최고의 장점은 범용성이다. 자바로 짜여진 grpc 서버와 파이썬인 클라이언트와 통신을 할..

[Nexters] 넥스터즈 (URL 단축팀) 정기활동 1주차 기록 - URL 단축 알고리즘 구현 및 코드 리팩토링

난 시간이 이렇게 빨리 갈 줄 몰랐다. 넥스터즈의 겨울 정기활동 2개월이 끝이 났다. 결과는 감사하게도 우수팀 선정! 매 주 세션 후 기록을 하려고 했지만, 너무 바빠서 기록할 틈이 없었다. 결론 적으로는 우리팀은 무사히 런칭을 마쳤다. 팀원들에게 너무 고맙다. 여태 했던 것들을 까먹을 까봐 적어 놓는다. 일단 우리 팀은 URL을 단축 하는 서비스를 개발하는 팀이다. 팀 구성은 (서버3, 디자인2, 프런트엔드3) 이렇게 되었다. 나는 서버 개발을 맡았다. URL을 단축 한다는 것은 큰 의미가 있다. 일반인들이 보기에는 저걸 굳이 줄여야할 필요가 있나라고 생각을 한다. 하지만 알게 모르게 그들도 일상속에서 단축 URL을 사용한다. 일례로, 가장 큰 서비스인 bit.ly가 있다. 원래 google의 단축 서..

[백준] 11279 최대 힙 풀이

힙은 쉬우면서 어려운 자료구조이다. 개념은 매우 쉬운데 구현에 있어서 놓치기 쉬운 부분들이 있기 때문이다. 문제 자체는 단순한 힙의 구현이다. 힙에 저장하는 부분이다. 저장할 때에는 위에 있는 노드와 비교를 진행한다. public static void push(int n) { heap[++index] = n; // 정렬 for (int i = index; i > 1; i /= 2) { if (heap[i] > heap[i/2]) { int temp = heap[i]; heap[i] = heap[i/2]; heap[i/2] = temp; } else { break; } } } 여기서 중요한 것은 인덱스의 범위이다. for 문안의 조건을 잘 생각해야 한다. 두 번째로 조금 까다로운 값 꺼내기 작업이다. pu..

반응형