전체 글 56

[서평] 처음부터 제대로 배우는 스프링 부트

백엔드의 필수적인 요소, 자바 웹 개발 프레임워크인 스프링 부트는 스프링 프레임워크를 보다 쉽게 사용할 수 있도록 만들 프레임워크입니다. 이는 스프링에서 제공하는 다양한 기능 예를 들자면 스프링 MVC, Data, JPA, Security 등 다양한 기능을 자동으로 설정하며 개발자가 별도로 설정 파일을 작성하지 않고 빠르고 간단하게 애플리케이션을 개발할 수 있습니다. 이 책은 앞서 말한 스프링 부트의 자주 사용되는 핵심 요소들을 보여주기 위해 각 장마다 예제를 통해 스프링에서 체험할 수 있는 다양한 기능들의 실사용 예시를 제공하고 있습니다. 첫 장부터 Maven과 Gradle, Java와 Kotiln을 설명하며 애플리케이션 환경을 다양한 방법으로 구현할 수 있다고 설명합니다. 이후 REST API를 실습..

책을 읽읍시다 2023.07.23

[서평] 이것이 C#이다

C#은 마이크로소프트에서 개발한 객체지향 프로그래밍 언어입니다. C#은. NET 프레임워크의 주요 언어 중 하나로 사용되며, Windows, 웹 애플리케이션 개발에 주로 사용되고 있습니다. 오늘 추천드릴 도서는 바로 이러한 C#의 입문서인 입니다. 책의 구성은 총 18장으로 무려 848페이지나 차지합니다. 저도 이전에 Window Form으로 다양한 메신저들을 개발한 프로젝트 경험이 있어 조금 더 친숙하게 다가왔지만, 입문서가 500장 정도 내외라고 생각했던 저에게는 매우 부담감이 큰 숫자였습니다. 그러나 실제로 보다 보면 오히려 연습문제, 실습 예제, 비타민 퀴즈 등 다양한 방법을 이용해서 조금 더 쉽게 설명하고 이를 기억시키려는 덕분인지 각 파트를 쉽게 진행할 수 있었습니다. 책의 구성은 이렇습니다...

책을 읽읍시다 2023.06.25

링크드 리스트(LinkedList)와 배열(ArrayList)의 장단점과 시간복잡도

배열(Array) - 장점 빠른 접근 속도 : 인덱스를 사용하여 원하는 위치의 요소에 바로 바로 접근이 가능하다. 캐시 효율성 증가 : 성능 증가를 위해서는 캐시를 효율적으로 사용하려면 데이터가 지역성을 가져야 한다. 지역성은 데이터가 시간적, 공간적으로 가깝게 일어나는 것을 의미한다. 배열 요소들은 메모리에 연속적으로 저장되므로, 이에 해당된다. 크기 변경이 없는 경우에 유용 : 크기가 고정되어 있는 데이터 집합에 적합하다. - 단점 크기 변경의 어려움 : 배열의 크기를 변경하기가 어렵다. 크기를 변경하려면 새로운 배열에 기존 요소를 복사해야 한다. 삽입 및 삭제의 비효율: 중간에 요소를 삽입하거나 삭제할 경우에는 뒤의 요소들을 다시 재배치 시켜주어야 한. - 시간복잡도 접근 (Access): O(1)..

멀티프로세스와 멀티스레드

프로그램 - 어떤 작업을 위해 실행할 수 있는 파일, 정적인 개념 프로세스 - 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태, 동적인 개념 프로세스 - 컴퓨터에서 연속적으로 실행되고 있는 프로그램 - 메모리에 올라와 실행되고 있는 독립적인 인스턴스 - 운영체제로부터 시스템 자원을 할당받는 작업 단위 - 기본적으로 프로세스당 최소 1개의 스레드를 가진다. - 프로세스는 독립된 메모리 영역(code, data, stack, heap을 할당 받는다.) - 프로세스는 별도의 주소 공간에서 실행되므로, 다른 프로세스의 주소 공간에 접근할 수 없다. - 프로세스 간의 데이터 통신을 위해 IPC을 통해 데이터를 주고받을 수 있다. IPC : 프로세스 간 통신(Inter-Process Co..

깃허브 브랜치(branch) & 포크(fork) & 풀리퀘스트(pull request) 사용해보기

깃허브 브랜치(branch)는 독립적으로 작업을 진행시키기 위한 개념입니다. 필요에 의해 만들어지는 브랜치는 다른 브랜치에 영향을 받지 않기 때문에 독립적으로 작업이 가능합니다. 즉 메인 브랜치에서 새로 생성된 브랜치는 해당 구역부터 별개의 값을 가지기에 원하는 방법으로 수정하셔도 무방합니다. 그렇기에 하나의 저장를 가지고 여러가지 작업이 가능하고, 만약 해당 작업이 적합하다는 생각이 든다면 메인 브랜치에 병합하거나 해당 작업이 마음에 들지 않는다면 해당 작업을 되돌리는 등 작업 단위로써의 관리를 편하게 할 수 있습니다. 포크(fork)는 다른 계정의 원격 저장소를 내 원격 저장소로 들고오는 것을 뜻합니다. 내 계정에서 해당 파일의 브랜치를 새로 만든다고 보셔도 됩니다. 풀리퀘스트(pull request..

네트워크 계층 (OSI 계층) & (TCP/IP 계층)

1계층 리피터 : 신호를 수신하여 신호를 증폭한 후 다음 구간으로 재전송하는 장치를 말한다. 허브 : 다수의 PC와 장치들을 묶어서 LAN을 구성할 때 해당 전기신호들을 받아서 그 신호들을 증폭시켜 다른 기기들로 뿌려주는 역할을 합니다. 허브는 단순한 중계기 역할을 합니다. 2계층 브리지 : 물리적으로 떨어진 매체를 연결시키거나, 때로는 서로 다른 MAC 프로토콜을 사용하는 네트워크를 연결해줍니다. 스위치 : 브리지의 상위호환으로 PC에 LAN이 제공하는 대역폭을 연결된 PC의 대수와 관계없이 고스란히 전달함. MAC주소를 가진 장비가 연결된 포트로만 프레임을 전송한다. 3계층 라우터 : 3계층, 서로 다른 네트워크들을 데이터 전송을 위해 최적 경로로 상호 연결한다. (Open Systems Interc..

회선교환과 패킷교환

데이터 통신을 위한 대표적 교환기술 회선교환과 패킷교환 교환이란? - 교환이란 필요한 때만 단말장치와 단말장치 간의 통신로를 확하여 전체의 효율화를 이루는 것을 말한다. 종류에는 전화교환망, 패킷교환망, 회선교환망, 종합정보통신망이 있다. 데이터 통신용 교환방식 중 회선교환방식은 비 저장방식이며, 패킷교환방식은 저장방식이다. 회선 교환 방식의 정의 - 회선교환이란 송수신 단말장치사이에서 데이터를 전송할 때마다 통신경로를 설정하여 데이터를 교환하는 방식이다. 회선 교환 - 회선의 설정 - 데이터의 이동 - 회선의 단절, 3단계로 이루어져 있다. - 데이터를 전송하기 전에 두 단말장치 간에 회선을 설정하고 회선이 설정되면 이 회선을 통해서 데이터를 전송하며 일정시간이 지나면 두 단말장치 중 하나가 단절된다...

C++에서 타입 별칭을 쓰려면...

3가지를 예로 들 수 있습니다. 1. using [이름] = [타입] ex) using ll = long long 으로 활용할 수 있습니다. 타입에 대한 새로운 이름을 만들거나 템플릿 타입에서 사용이 가능합니다. 템플릿 타입은 이런 형식으로 사용할 수 있습니다. template using MyVector = std::vector; MyVector myIntVector; MyVector myDoubleVector; 2. #define [이름] [타입] ex) #define ll long long 으로 활용할 수 있습니다. define은 단순 텍스트를 치환해서 사용가능하기 때문에 상수나 매크로 정의에 사용하는 경우가 많습니다. 3. typedef [타입] [이름]; ex) typedef long long l..

KMDB&KOBIS API를 활용하여 영화 포스터 가져오기 & 박스오피스 순위 만들기

이클립스 2022.12 버전을 사용했습니다.아래의 코드 호출방법은 정답이 아니며 비효율적일 수 있습니다.1. API 발급받기 먼저 박스오피스 순위를 받아오기 위해 KOBIS API를 발급합니다. 영화진흥위원회 오픈APIOPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.www.kobis.or.kr해당 페이지에 접속하셔서 로그인 후 키 발급 탭에서 인증키를 발급하시면 됩니다. 다음으로 포스터를 활용하기 위해 KMDB에서 API 인증키를 발급합니다. KMDb - 한국영화데이터베이스 www.kmdb.or.kr해당 링크로 들어가셔도 되고, 메인 홈페이지에서 옆의 메뉴를 통해고객서비스 -> 오픈API안내 -> OPEN API -..

[GIT] | ! [rejected] main -> main (fetch first)

sourcetree를 사용 중에 해당 에러가 출몰하였다. git에는 정상적으로 커밋되었다고 하지만, github에는 올릴 수 없다고 출력되었다. 뭐지 싶었는데 알고보니 깃허브 내에서 README.md 를 수정할 일이 있어서 수정했더만 sourcetree에서는 해당 내용이 반영되지 않았다고 거부한다는 것이였다... pull을 사용하면 github에 올린 내용들은 자동으로 branch로 생성되어 git에 merge된다. 이를 다시 push 해주면 정상적으로 작동된다. 그냥 pull한번 push한번 눌러주면 해결되는 일이였다...