전체 글136 8. 자바 컨테이너는 무엇을 의미하나요? 데이터의 ‘저장’이라는 의미로 가장 먼저 등장한 자료구조는 배열이다. 배열을 사용하면 동일한 성질을 가진 primitive type 또는 Reference type의 값을 저장할 때 활용할 수 있다. 하지만 이 글을 읽는 사람들은 대부분 알다시피 배열에는 무시할 수 없는 큰 단점이 있다. ‘크기가 정해지면 바뀔 수 없다.’라는 배열의 성질은 자료 저장의 확장성을 크게 저해하는 요소이다. 이를 해결하기 위해 다양한 자료구조들을 지원하려는 목적으로 등장한 것이 java.util 라이브러리의 container 클래스이다. 주의!!!! 스윙에 사용되는 java.awt.container와 다르다. 대표적인 기본 타입으로 List, Set, Map 등이 있는데 이들은 container라는 클래스에 물리적으로 묶여있.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 1. 7. 자바 직렬화란 무엇일까요? 또 언제 사용할까요? 자바를 다루면서, 더 정확히는 Springframework를 다루면서 객체에 대해 활용할 상황을 겪는다면 심심치 않게 직렬화(Serialize)에 대해서 듣게 된다. 대체 뭐길래 자주 듣는 것인가, 언제/어떻게 활용할 수 있는가 한번 알아보자. 직렬화(Serialize) 자바에서 직렬화란 자바 시스템 내부에서 사용되는 객체를 외부의 자바시스템에서 사용할 수 있도록 byte 형태로 전환하는 기술을 말한다. 거꾸로 자바 시스템이 외부에서 byte형태의 데이터를 받고 객체로 변환하는 기술을 역직렬화라고 한다. Book book = new Book(); System.out.println(books[0]); /** * com.example.test.BookTest$Book@3d00c2ae */ 만들어낸 객체에 t.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 27. Github flow 대부분의 개발자들이 협업을 통해 일을 하고 작업을 공유하고 있다. 어떤 개발자는 코드를 보고 수정사항을 찾아내고 어떤 개발자는 기능을 개발하기 위해 코드를 추가하고 어떤 개발자는 기능 보수를 위해 기존의 코드를 뜯어고치고 있다. 이들이 각자 작업하는 경우 파일에는 버전이 생기고 이를 관리해야 하는 필요성을 느끼게 된다. 우리는 이럴 때 형상관리도구를 사용하게 된다. 현재 주류로 여겨지는 Git에서 사용할 만한 브랜치 관리 전략 세가지를 정리하고 소개하겠다. 오늘은 그 첫번째 flow인 Github Flow이다. Github Flow 추후 소개할 Git Flow가 Github에서 활용하기 복잡하다는 단점을 극복하기 위하여 나온 브랜치 전략이다. 브랜치는 단순하게 Master와 Feature브랜치, 두 개로.. cs/Git 2023. 7. 26. 6. throw와 throws의 차이는 무엇인가요? 자바에서 프로그램이 비정상 종료하는 가장 대표적인 경우는 Error를 만나는 경우와 Exception을 만나는 경우이다. Exception을 만나는 경우 에러를 처리하는 복구 로직을 통해 프로그램의 비정상 종료를 막고 원활한 서비스를 돕는다. (물론 Exception Handling의 의미는 훨씬 깊고 넓다. 언급하지 않은 의미가 훨씬 많으니 “Exception”에 대해서는 따로 공부하자.) throw 예외를 고의로 발생시키는 역할을 한다. public class File { ... public File(String pathname) { if (pathname == null) { throw new NullPointerException(); // 예외 던지기 } this.path = fs.normalize.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 25. 5. 자바에서 final의 기능은 무엇입니까? final은 사전적 의미와 마찬가지로 ‘마지막’이라는 의미를 지닌다. final을 통해 객체는 변경될 수 없는 성질(불변성)을 가지게 되고 final은 거의 모든 대상에 사용될 수 있다. 대상 의미 멤버변수 값을 변경할 수 없는 상수가 된다. 지역변수 값을 변경할 수 없는 상수가 된다. 클래스 변경(확장)될 수 없는 클래스를 의미하게 된다. 따라서 final 클래스는 다른 클래스의 조상이 될 수 없다. 메소드 변경(확장)될 수 없는 메소드를 의미하게 된다. final 메소드는 Override를 통해 재정의 될 수 없다. + 현업이나 대규모 프로젝트에 가면 기능 단위 메소드에 final 키워드를 통해서 더 이상의 변경을 금지하는 의미를 표현하기도 한다. 변수에 적용된 final 앞에 final이 붙은 변수.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 24. 4. equals()와 hashcode()를 같이 재정의해야 하는 이유 객체의 동등성과 동일성에 대해서 정리할 필요가 있다. 동일성 : 같은 주소값을 가짐 동등성 : 객체 내부에서 값을 비교 (hashCode와 equals를 재정의하여 비교) 우리가 == 과 equals()의 차이점을 String Type의 변수에서 확인했듯이 ==은 동일성을 판단하는 연산자였고 equals()는 동등성을 판단하는 메서드였다. equals() public boolean equals(Object obj) { return (this == obj); } 위 equals 메서드는 Object 클래스 내부에서 선언된 equals이다. this와 파라미터로 받은 obj의 주소값을 비교하고 그 결과 논리값을 반환한다. 보통 새로운 클래스를 만들게 되면 이 equals()를 재정의하여 객체 사이의 동등성을.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 20. 3. equals와 ==의 차이점이 뭔지 아시나요? ==과 equals는 둘 다 두 가지의 변수나 객체를 비교하며 다르면 false를, 같다면 true를 반환한다는 특징이 있다. 그렇다면 이 둘의 차이점은 무엇인가? 본질적인 차이 (메서드 vs 연산자) equals는 Object 객체의 메서드이고 == 은 비교 연산자이다. 따라서 Object 객체를 상속받지 않는 primitive type변수들은 equals 메서드를 사용할 수 없다. 비교 대상 차이 (내용 vs 주소값) equals는 비교하고자 하는 대상의 내용을 비교하고 == 는 비교하고자 하는 대상의 주소값을 비교한다. String A = "Java"; String B = A; String C = new String ("Java"); System.out.println(A == B); System.o.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 19. 2. JRE와 JDK의 차이점 JRE JRE : Java Runtime Environment의 약자로, 직역하자면 자바 실행 환경이다. Java Virtual Machine이라 불리는 JVM와 자바 실행에 필요한 클래스 라이브러리 등을 포함하고 있어 JRE를 통해서 자바 실행을 지원받을 수 있다. 다만 JRE는 개발에 필요한 요소들을 들고 있지 않다. 따라서 개발을 하기 원한다면 JRE는 옳은 선택이 아니다. JDK JDK는 Java Development Kit의 약자로 자바 개발 키트이다. JDK는 자바 어플리케이션을 개발하기 위한 도구를 지원한다. 대표적인 예시가 자바 컴파일러(javac), 자바 소스 코드의 코드 문서를 생성하는데 도움을 주는 javadoc, 일종의 압축 파일로 java기반 아카이브파일인 jar의 실행 등이 있다.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 17. 1. SOLID 원칙 ✏️로버트 마틴이 클린코드를 지향하며 고안한 객체지향의 5가지 원칙을 통틀어 객체지향 5원칙(SOLID)이라 칭한다. 일단 한번 보면 개념은 알아듣긴 하지만 막상 실현하려면 생각보다 어려움이 따른다. SRP, OCP, LSP, ISP, DIP - 5개의 원칙의 앞글자를 따서 SOLID라고 부른다. 🌟SRP 🌟OCP 🌟LSP 🌟ISP 🌟DIP ✍️SRP란? SRP란, Single Responsibility Principle(단일 책임 원칙)으로 '한 클래스는 하나의 책임만 가져야 한다.'는 뜻이다. 여기서 하나의 책임이라는 표현은 조금 모호하게 들릴 수 있다. 이는 문맥과 상황에 따라 달라지며 클 수도 있고 작을 수도 있다. 중요한 것은 "변경"이다. 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 15. 네이버 메인 페이지의 트래픽 처리 - 마무리 지금까지 네이버가 메인 페이지에서 발생하는 트래픽을 어떻게 처리하는지 총 서론, 본편 1, 본편 2로 나누어 살펴보았다. 서비스 아키텍처 모식도를 다시 한번 살펴보며 정리하자. 🔔 서비스 요구사항 🔔 ❗어떤 서버로 접속해도 동일한 내용을 보여 주어야 하며, 특정 상탯값(사용자의 로그인 여부 등)에 의존하지 말아야 한다. ❗ 무슨 일이 있어도 사용자에게 서비스가 제공되어져야 한다. => 브라우저에 빈 페이지가 나타나선 안된다. => 메인 페이지에서 연동하는 외부 시스템은 늘 접속 불안정을 가정하고 빠른 실패 전략을 실행한다. ❗ 트래픽 증가에 탄력적으로 대처할 수 있어야 한다. => 트래픽이 폭주할 때 서버 증설만으로도 대응할 수 있어야 한다. => 각 컴포넌트(Web server, WAS)의 효율성을 극.. 기술블로그 2023. 7. 13. 네이버 메인 페이지의 트래픽 처리 - 본편 2 네이버 메인 페이지의 트래픽 처리 - 본편 1에서 정리한 네이버 메인 페이지의 서비스 요구사항과 기술 스택은 다음과 같다. 🔔 서비스 요구사항 🔔 ❗어떤 서버로 접속해도 동일한 내용을 보여 주어야 하며, 특정 상탯값(사용자의 로그인 여부 등)에 의존하지 말아야 한다. ❗ 무슨 일이 있어도 사용자에게 서비스가 제공되어져야 한다. => 브라우저에 빈 페이지가 나타나선 안된다. => 메인 페이지에서 연동하는 외부 시스템은 늘 접속 불안정을 가정하고 빠른 실패 전략을 실행한다. ❗ 트래픽 증가에 탄력적으로 대처할 수 있어야 한다. => 트래픽이 폭주할 때 서버 증설만으로도 대응할 수 있어야 한다. => 각 컴포넌트(Web server, WAS)의 효율성을 극대화할 수 있어야 한다. 1. GCDN(Global C.. 기술블로그 2023. 7. 13. SSAFY 10기 전공자 합격 후기 이 글을 보고 계신 고민 많은 주니어 개발자 분들께 양해의 말씀 구합니다. 다른 포스팅과 마찬가지로 이 글에서도 구체적인 사항을 공개할 수 없는 대외비라는 사정이 존재합니다. SSAFY를 지원하기 위해 제가 준비했던 과정과 그 후기만을 말씀드리는 글이라는 점을 미리 밝힙니다. 또한, 객관적인 평가를 위해 간단한 저의 프로필을 함께 올립니다. - 인서울 하위권 4년제 대학 졸업예정자 - 학점 3.9 - 프로젝트 경험 2회 - 기업 인턴 경험 1회 - 백준 알고리즘 골드 3 지원 동기 SSAFY를 처음 알게 된 것은 학교 게시판에 걸려있던 SSAFY 7기 모집 포스터를 보고 나서였다. 막 복수전공으로 컴퓨터 공부를 시작하게 된 때라 정확히 SSAFY 안에서 무엇을 하게 되고 어떤 결과물을 만들 수 있는지 자.. 카테고리 없음 2023. 7. 1. 이전 1 ··· 8 9 10 11 12 다음