백엔드 개발자가 꼭 읽었으면 하는 글 리스트 인터넷 세상에는 좋은 정보들이 정말 많다. 특히 네이버, 카카오, 라인 등 아주 우수한 개발자 분들이 정성들여 작성한 기술 블로그의 글에서는 많은 정보와 경험, 노하우를 얻을 수 있다. 내가 겪어보지 못한 트러블 슈팅을 대리로 경험할 수도 있고, 나의 진로를 결정하는데에 있어 도움이 될 수도 있다. 시간이 날때마다 유명 IT 기업들의 기술 블로그를 읽고 있는데, 한 번 읽었더라도 완전히 이해하지 못하거나 한 번더 읽고 싶은 글들을 북마크에 따로 저장해두곤 했다. 하지만 이게 너무 많이 쌓이다보니 이것을 정리할 필요성을 느꼈다. 이왕 정리하는김에, 많은 사람들이 같이 볼 수 있다면 좋겠다는 생각이 들어 내 기술블로그에 정리해본다. 카테고리를 나누어 정리하였고, ..
오류(error)와 예외(exception) 자바에서 오류(error)란 시스템이 종료되어야 할 수준의 수습하기 힘든 심각한 문제를 의미한다. 이러한 오류는 개발자가 미리 예측하여 처리하기 힘든 것이 대부분이기 때문에 오류에 대한 처리는 매우 힘들다. 반면 예외(exception)는 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생하는 예측하고 방지할 수 있는 문제를 뜻한다. 따라서 자바 개발자는 예외 처리(Exception Handling)를 통해 예외를 원활하게 처리할 수 있어야 한다. 예외 처리(Exception Handling) 자바에서는 예외를 처리하기 위해 try / catch / finally 문을 사용할 수 있다. try{ // 예외를 처리하길 원하는 실행 코드; }ca..
제네릭(Generic)이란? 자바에서 ArrayList와 같이 꺽쇠 안에 클래스 타입이 명시되어있는 것을 확인할 수 있다. [그림 1]은 ArrayList의 내부이다. ArrayList처럼 'E'라고 표시된 것을 확인할 수 있다. ArrayList list = new ArrayList(); ArrayList list2 = new ArrayList(); 위와 같이 ArrayList에 저장할 타입을 Integer, String 등으로 지정할 수 있다. 이처럼 데이터의 타입을 일반화(Generalize)하는 것을 제네릭(Generic)이라고 할 수 있다. 이러한 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정할 수 있다. 따라서 컴파일 시에 미리 타입 검사(Type Check)를..
다양한 프로그래밍 언어 소스코드 품질평가 기업인 TIOBE index에서는 평점이나 선호도를 기반으로 프로그래밍 언어의 순위를 평가하고 발표한다. 티오베 인덱스에 따르면 2022년 6월 현재 1순위는 Python이 차지하고 있는 것을 확인할 수 있다. 그 뒤로 C언어, Java, C++ 등이 위치하고 있음을 확인할 수 있다. 이처럼 1위부터 4위까지를 차지하고 있는 C, C++, Java, Python에 대하여 비교, 분석해보자. ※ 본 포스팅을 읽기 전 참고하면 좋은 글들 : [프로그래밍 언어론] 객체 지향 프로그래밍(OOP : Object Oriented Programming)란? OOP의 장단점 객체 지향 프로그래밍(OOP)과 객체(Object) 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목..
Map 컬렉션 클래스 JAVA의 Map 컬렉션 클래스는 Collection 인터페이스를 상속하진 않지만 Collection 자료구조를 이야기 할 때 빠지지 않는다. Map 클래스는 Map 인터페이스를 상속한다. Map 클래스는 중복을 허용하지 않는 Key 값과 그에 대응하는 중복이 허용되는 Value 값이 쌍을 이루어 저장되는 자료구조이다. 이때 Key 값은 Value를 찾기 위한 색인과 같은 역할을 한다. Map 클래스는 요소의 저장 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 중복을 허용한다. Map 대표적인 컬렉션 클래스 3가지에 대하여 알아보자. HashMap HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashMap 클래스는 해시 ..
Set 컬렉션 클래스 Set 컬렉션 클래스는 Set 인터페이스를 구현한 클래스이다. Set 컬렉션 클래스는 요소의 저장 순서를 유지하지 않고, 같은 요소의 중복 저장을 허용하지 않는다. 따라서 중복을 제거해야 하거나 저장 순서가 중요하지 않을 때 자주 사용되는 컬렉션 클래스이다. 이러한 Set 컬렉션 클래스에 속하는 대표적인 클래스는 다음과 같다. 1. HashSet 2. TreeSet 간단하게 이 두 가지 클래스에 대해 알아보자. HashSet 클래스 HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스이다. HashSet 클래스는 hash 알고리즘을 사용하여 검색 속도가 매우 빠르다. 이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다. H..
문제 https://programmers.co.kr/learn/courses/30/lessons/1832 코딩테스트 연습 - 보행자 천국 3 3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 6 3 6 [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] 2 programmers.co.kr 풀이 정말 어려웠지만 재밌는 문제였다. 풀이법이 잘 생각나지 않지만 생각만 잘한다면 코드 길이가 매우 짧고 명료하게 해결할 수 있다. 이 문제는 DP를 이용하면 해결할 수 있다. 나는 DP 배열을 다음과 같이 정의했다. DP[0][i][j] = (i,j) 좌표에 세로로 들어오는 경우의 수 DP[1][i][j] = (i, j) 좌표에 가로로 들어오는 ..
서버 관리의 어려움 서버를 관리하는 일은 매우 복잡하고 어려운 작업이다. 만약 서버를 개발할 때 개발 환경이 바뀌게 된다면 컴퓨터 세팅이나 프로그램 등을 처음부터 다시 설정해야 한다. 시스템 환경, 방화벽, 네트워크 설정, Dependency, 각종 개발 프로그램 설정 등... 이러한 방식은 매우 번거롭다는 문제점이 발생한다. 특히 DevOps나 MSA가 유행하면서 Micro Service들이 잘게 나뉘면서 관리가 더욱 복잡해지게 되었다. 게다가 새로운 툴은 끊임없이 나오고, 클라우드의 발전으로 설치해야 할 서버가 매우 많아지는 상황에서 서버 관리 방식의 변화가 필요했다. 이러한 상황 속 어려움을 해결해줄 도커(Docker)가 등장하게 되었다. 도커(Docker)란 무엇인가? 도커는 컨테이너 기반의 오픈..
String 클래스는 불변이다 자바에는 String, StringBuffer, StringBuilder 클래스가 존재한다. 자바에서 String 클래스는 보통 불변(immutable)하다. 즉, 한 번 초기화되면 변하지 않는다. 혹자는 String 클래스도 변한다고 말하지만, 사실 그것은 변하는 게 아니라 새로 생성한 것뿐이다. 예를 들어, String 클래스의 concat() 메서드나 "+" 연산자를 이용해 문자열의 변화를 주더라도, 그것은 문자열이 변경됐다기보다는, 새로 생성한 것이라고 봐야 한다. 자세한 내용은 아래 게시글을 참조하면 좋다. [JAVA] 자바 String Constant Pool 이란?, String "=="와 equals의 차이 String Constant Pool이란? 아래와 같..
NAC(Network Access Control)이란? NAC의 탄생 배경 NAC는 말 그대로 네트워크 접근 제어를 뜻하는 것으로 엔드포인트(PC, 스마트폰 등과 같은 네트워크에 접속하는 모든 유무선 기기)가 네트워크에 접근하기 전 보안 정책 준수 여부를 검사하여 네트워크 사용을 제어하는 것을 말한다. 또한, NAC 시스템은 네트워크에 연결된 엔드포인트들의 여러 정보를 수집하여 엔드포인들을 분류하고 분류한 그룹의 보안 위협 정도에 따른 제어를 수행하기도 한다. 이러한 NAC는 어떻게 탄생하게 되었을까? NAC는 세계적인 컨설팅 회사인 가트너(Gartner) 그룹에서 새로운 네트워크 보안 모델을 제시한 것을 계기로 급속도로 확산 되었다. 사내망에 바이러스 같은 것이 침투하면 순식간에 사내망 전체로 퍼지게 ..