고민하기 15

[자료구조] Array와 LinkedList의 삽입/삭제 (feat. ArrayList vs LinkedList)

1. Array vs LinkedList 정의 Array와 LinkedList는 모두 연속된 데이터 집합을 위한 기본 자료구조입니다. 차이 Array와 LinkedList의 가장 큰 차이는 메모리 할당 방식입니다. Array Array는 연속적인 주소 할당으로, 주소를 이용하면 모든 데이터의 접근 시간이 동일한 Random Access가 가능하여 데이터 탐색이 빠를 수 있습니다(O(1)). 그러나 데이터 삽입/삭제에서 이 연속성을 지키기 위해 데이터를 움직이는 비용(O(n))이 발생하고, 크기가 고정되야하기 때문에 Dynamic Array의 경우 데이터 삽입 중 크기가 큰 Array로 copy하는 비용(Amortized O(1))이 발생할 수 있습니다. LinkedList LinkedList는 원소마다 ..

고민하기 2022.04.16

JAR와 WAR의 차이?

서비스에 맞는 Spring boot 패키징 방식? 프로젝트 도중 Spring boot를 이용한 서버를 만들려고한다. 이 서버는 API 서버로 배포하여 사용되고, 리소스 서버(DB)를 따로 두어 요청에 맞게 사용자에게 응답을 주는 역할을 하려한다. Spring boot에서는 jar와 war 2가지 방식의 패키징을 지원하는데, 어떤 방식을 사용해야할까? JAR (Java ARchive) Java 어플리케이션이 자바 환경 위에서 바로 동작할 수 있도록 자바 프로젝트를 압축한 파일 JRE(Java Runtime Environment)만 있으면 실행 가능 클래스 파일, 라이브러리, 리소스, 설정 파일들(META-INF 등)을 모여서 하나의 어플리케이션/라이브러리로 형성 META-INF - 자바 패키징 기술인 ja..

고민하기 2021.08.22

OAuth란 무엇인가? (인증에 대하여)

티스토리 API 어떻게 써야하지 간단한 프로젝트를 하나 시작하면서 티스토리 API를 사용해야했다. API를 이용해서 내 블로그에 올라온 글을 가져와야하는데, 인증에 대한 기초가 없어서 이용방법이 이해가 되지 않았다. 어찌저찌해서 Access token을 받아 API를 사용할 수 있게 되었지만, 어떤 과정으로 사용이 가능하게 되었는지 확인해보기로 했다. OAuth의 동작에 대해 공부를 시작하고나니 궁금한 내용이 꼬리에 꼬리를 물어 많은 내용이 담기게 되었다. 인증에 대한 기본 지식이 없어, 여러 자료를 토대로 나름의 순서로 재구성해보았다. 1. 기본 인증 동작 1-1) 인증 방식 웹 서비스에서 가장 많이 사용되는 통신 방식은 HTTP 보통 인증 과정에서 HTTP의 헤더에 인증 수단을 넣어 서비스 요청을 보..

고민하기 2021.08.21

웹이란 무엇일까?

Web Server와 Web Application Server(WAS)의 차이 웹이란 무엇인가에 대해 고민하게된 계기다. 내가 수업시간에 배웠던 웹은 웹 서버(html, css, php, apache server 등등)에 속해 있었으며, 세상에 많고 많던 컴퓨터 지식 중에 JSP와 Servlet 같은 중요한 수업이나 공부를 놓치면서 이 차이에 대해 고민해본 적이 없었다. 관련 내용을 간략하게 정리도 했다. 2021.07.11 - [[개발] 고민하기] - Web Server와 Web Application Server(WAS) Web Server와 Web Application Server(WAS) Spring boot는 WAS 설정이 필요없는 Framework Jhipster를 설치하고 환경세팅하려다가 이러..

고민하기 2021.08.11

백엔드 개발자 로드맵

https://roadmap.sh/about Developer Roadmaps Community driven roadmaps, articles, guides, quizzes, tips and resources for developers to learn from, identify their career paths, know what they don't know, find out the knowledge gaps, learn and improve. roadmap.sh 먼저 개발자가 되기 위해 고민해본 사람이, 같은 고민을 하는 사람을 위해 어떤 방향으로 나아가야하는지 정리해주는 건 정말 멋진 것 같다 로드맵에 대해서는 이견도 있겠지만, 방향을 모르거나 더 공부할 내용을 찾을 때 좋은 참조인 것 같다 관련 내..

고민하기 2021.08.11

버퍼(Buffer)를 사용하면 속도가 빨라진다?

버퍼는 처리속도를 빠르게한다? 운영체제를 공부하면서 "버퍼"를 오랜만에 접했다. 내가 버퍼하면 가장 먼저 떠오르는 것은, 네트워크에서 패킷에 데이터를 싣는 과정에 사용되는 버퍼다. 그리고 운영체제에서 설명하는 버퍼는 속도 차이를 가지는 장치 사이에서 사용된다고 한다. 버퍼의 의미가 "완충기"인 것처럼, 두 버퍼 모두 같은 역할이며 존재하는 의미도 같다. 그런데 버퍼에 대해 검색하던 중, 아래 문구를 보고 신경쓰였다. 버퍼를 사용하면 속도가 빨라진다[0][1] 버퍼라는게 속도가 다른 두 장치 사이의 데이터 교환에서 유용한 건 알겠지만, 어떤 측면에서는 불필요한 과정이 추가되었기 때문에 오버헤드가 생긴 것이다. 그럼에도 버퍼를 사용하면 속도가 빨라진다는 말이 어떻게 생긴 것인지 궁금했다. 버퍼의 동작 먼저 ..

고민하기 2021.08.02

기업이 말하는 백엔드 개발자

백엔드 개발자를 조사하게 된 이유 나는 데이터 엔지니어가 되고 싶었다. 데이터 자체에 대한 흥미가 높고, 서비스들이 데이터를 중심으로 개발되는 사실 또한 매우 흥미로웠다. 그래서 데이터 엔지니어가 되기 위해 데이터 엔지니어는 어떤 일을 하는지, 어떤 역량이 필요한지를 조사했었다. 2021.06.23 - [데이터 엔지니어링] - 기업들이 말하는 데이터 엔지니어

고민하기 2021.07.14

Python의 Hashable (Dictionary의 key가 되는 기준은 무엇일까?)

Dictionary의 key는 Immutable 객체만 가능? Python에서 dictionary(dict)는 강력한 기능을 가지고 있다. dict의 정수, 문자열, 심지어 tuple도 key로 들어갈 수 있다. d = dict() d[1] = 1 d["hi"] = 2 d[(1,2,3)] = 3 "파이썬 알고리즘 인터뷰"라는 책을 읽으면서 다음과 같은 문구가 있었다[1]. 특히 파이썬의 딕셔너리는 해시할 수만 있다면 숫자뿐만 아니라, 문자, 집합까지 불변 객체를 모두 키로 사용할 수 있다. 나는 이 때 이 문장의 전체를 보지 못하고, 보고싶은 단어만 보았다. 이 문구의 의미가 "dict의 key는 불변 객체만 가능하다"라고 이해했다. 그래서 궁금했다. Immutable 객체만 key가 될 수 있는 이유가..

고민하기 2021.07.12

Web Server와 Web Application Server(WAS)

Spring boot는 WAS 설정이 필요없는 Framework Jhipster를 설치하고 환경세팅하려다가 이러한 문구를 발견하였다[1]. Spring boot : 스프링에서 어려운 설정이나 WAS에 대한 설정없이 바로 개발에 들어갈 수 있도록 만드는 프레임워크 WAS라는 단어가 자주 보였는데, 나는 이러한 단어를 본 적이 없다. 찾아보니 풀어쓰면 Web Application Server였다. 아직 명확한 뜻을 이해하지 못했다. WAS가 뭘까? WAS의 구조 Web Application Server는 Web Server를 포함하는 개념이라고 한다. 정확히는 Web server + Web Container이다. 그리고 Web Container에 대한 설명에서 이러한 문구를 발견했다[2]. JSP와 Serv..

고민하기 2021.07.11