본 내용은 Operating System Concepts 8th Edition 번역본 책을 읽고 공부한 내용입니다. 목차 1. 협력적인 프로세스 모델 1) 공유메모리 시스템 2) 메세지 전달 시스템 2. CLIENT-SERVER 통신 1) 소켓 2) RPC(원격 프로시저 호출) 1. 협력적인 프로세스 모델 프로세스가 시스템에서 실행 중인 다른 프로세스들에게 영향을 주거나 받는다면 이는 협력적인 프로세스들이라고 말한다. 프로세스간 통신에는 기본적으로 공유 메모리 와 메시지 전달의 두 가지 모델이 있다. 이에 대해 알아보자! 1. 공유 메모리 시스템 일반적으로 운영체제는 한 프로세스가 다른 프로세스의 메모리에 접근하는 것을 금지한다는 것을 기억하자! 그런데도 메모리를 공유하고 싶다면, 프로세스 둘 모두 서로..
전체 글
개발 블로그 💻👩💻본 내용은 Operating System Concepts 8th Edition 번역본 책을 읽고 공부한 내용입니다. 목차 1. UNIX Process Model에 대한 이해 2. 프로세스 상태 전이 3. Process Creation/Operation in UNIX 참고 문헌 1. UNIX Process Model 아래 내용은 2에 해당하는 프로세스 상태전이를 참고하면서 보면 더 도움이 됩니다. 하나하나 차근차근 잘 외워보자(?) 1. 프로세스가 사용자 모드에서 실행 중(System Call에 의해 커널모드로 전환될 수 있다.) 2. 프로세스가 커널 모드에서 실행 중 - Running 3. 프로세스가 실행되고 있지는 않지만 커널이 예약하는 즉시 실행할 준비가 되어 있습니다. (커널이 스케줄하면 바로 실행..
본 내용은 Operating System Concepts 8th Edition 번역본 책을 읽고 공부한 내용입니다. 목차 1. 운영체제란 1) 운영체제가 하는 일 2) 운영체제의 동작 2. 운영체제의 관리 1) 프로세스 관리 2) 메모리 관리 3) 저장장치 관리 4) 보호와 보안 3. 프로세스 1) 프로그램과 프로세스 2) 프로세스 상태 3) PCB 4. 프로세스 스케줄링 1) 스케줄링 큐 2) 스케줄러(schedulers) 3) 문맥교환(context switching) 1. 운영체제란 1. 운영체제가 하는 일 운영체제의 역할을 알아보기 위해서는 사용자와 시스템 두 관점에서 살펴보아야 한다. 컴퓨터에 대한 사용자의 관점은 사용되는 인터페이스에 따라 달라진다. 어떤 사용자는 모니터/키보드/마우스 를 사용..
먼저 이 둘에 대해 알아보기 전에 패킷, 그리고 프로토콜에 대해서 알아보자. 패킷? 패킷은 네트워크에 접속되어 있는 컴퓨터끼리 통신을 통해 주고받는 데이터 단위를 의미한다. 프로토콜? 교수님 말씀에 의하면 "아, 나는 그 사람과 프로토콜이 좀 안 통해" 라는 말을 자주 쓴다고 한다.(..?) 암튼 프로토콜이란 서로 떨어져 있는 컴퓨터끼리 통신을 수행하기 위한 약속을 말하며, 일종의 통신 규약이다. 프로토콜에는 아래와 같은 사항들이 들어간다. 구문 -- 데이터의 구조나 형식 ex. 서브넷 마스크 의미 -- 비트들의 영역별 의미 타이밍 -- 언제 데이터를 전송할지, 얼마나 빨리 전송할지? OSI 모델에서 계층구조, 계층 간 인터페이스, 각 계층의 기능 OSI 모델의 가장 큰 특징은 기능들이 구분되어 있다는 ..
개요 슬램덩크 너무 재밌다ㅠㅠ 꼭 보길!! 나는 오히려 상대편 정우성을 보면서, 이 영화를 볼 때 쯤 내 상황이랑 너무 똑같은 것 같아서 심심한 위로를 받았다. 죽어라 노력했는데도 일이 잘 풀리지 않는 경험은 정말 값지다. 값진 이유는 이제부터 내가 증명하면 되겟지 >- docker build -> docker push 하는 걸 볼 수 있다. 이 과정은 아주 귀찮고 하찮다.. github actions, jenkins를 이용하면 자동 배포가 가능하다. 우리는 팀원들과 github organization을 사용하여 서버를 만들고 있으므로 GitHub과의 통합이 쉬운 github action와 docker를 연동시켜 배포해보기로 했다. build pipeline의 장점 위와 같은 CI/CD를 사용하는 이유는..
이 글은 그림책이나 단어책마냥 쉬운 OS 개념 정리입니다. OS란? OS란 'Operating System'의 약자로, 컴퓨터를 관리/제어하고, 컴퓨터를 작동시키기 위한 토대를 만드는 소프트웨어를 의미한다. Windows, Mac이 그 종류라고 생각하면 된다. OS의 가장 큰 장점은 컴퓨터 별 기능과 동작의 차이를 OS가 흡수해 줄 수 있다는 것이다. ☆사용자가 컴퓨터 하드웨어 사이에서 중계 역할을 하면서, 프로그램의 실행을 관리하고 제어하는 시스템 소프트웨어 ☆컴퓨터가 켜질 때 메모리에 적재되어 모든 프로그램의 실행을 제어하고 사용자의 요청을 처리해주는 소프트웨어 ☆컴퓨터의 자원을 독점적으로 관리하는 특별한 소프트웨어 OS는 어디에 있을까? OS는 보통 하드디스크 안에 저장되어 있다. 외장형 하드디스크..
별로 중요하지 않음 주의.. ABS(X) X의 절대값을 반환한다. SIGN(X) X가 음수이면 -1, 0이면 0, 양수이면 1을 반환한다. MOD(N, M) N을 M으로 나눈 나머지를 반환 FLOOR(X) X보다 크지 않은 가장 큰 정수 리턴 CEILING(X) X보다 큰 수 중 가장 작은 정수를 반환 ROUND(X) X를 반올림한 수를 반환 ROUND(X,D) X를 소수점 D자리 이하에서 반올림한 결과 반환 LOG(X) X를 자연 로그로 취한 값을 리턴 LOG10(X) X를 10 로그로 취한 값을 리턴 POW(X,Y) = POWER(X,Y) X를 Y제곱한 값 리턴 SQRT(X) X의 제곱근을 리턴 LEAST(N1, N2, N3) GREATEST(N1, N2, N3) N1, N2, N3 중 가장 작은 수..
문자열 관련 Mysql 함수 정리 ASCII(str) str의 맨 왼쪽 문자에 해당하는 아스키 코드의 값을 리턴하는 함수이다. ASCII('1') 은 49에 해당함 CONV(N, from_base, to_base) 수의 진수를 바꾸는 함수. from_base 진수의 N을 to_base 진수의 수로 변환하여 문자열로 리턴 CONV(8, 10, 2)는 1000에 해당함 CONCAT(str1, str2, ...) str1과 str2 문자열을 접합하는 함수 CONCAT('TEAM', 'N','M') 은 TEAMNM 을 리턴 LENGTH(str) str 문자열의 길이를 리턴 LOCATE(substr, str) substr이 str에서 시작하는 문자의 위치를 리턴 LOCATE('rea', 'korea') 는 3에 ..
문제 일단 프로그래머스는 시간제한이 따로 명시되어 있지 않다. 약 1~10초 정도의 시간 안에 풀면 된다고 암묵적으로 정해져 있다고 한다. 입력 N값이 최대 100만이므로, O(N^2)은 안된다. IDEA (잘못된 생각들..) 일단 for문 두 개로 돌리는 방법은 절대 통하지 않는다. O(N^2) 그래서 뒤에서부터 하나씩 숫자들을 판단해가면서 dictionary에 최소 index를 저장해주고 탐색하는 식으로 가려고 했으나, dictionary에 저장되는 수마저 100만이므로 똑같이 O(N^2)가 되어 이 방법도 불가능하다. IDEA - stack 자료구조 + while문 결국 아이디어를 참고하고 만 문제이다.😓 다음과 같이 하나씩 돌면서 numbers[i]가 '가까운 가장 큰 수'인 것들을 stack에서..
연습 풀이 전략 프로그래머스에서 6가지의 카테고리 별로 나누어 연습해볼 수 있는데, SELECT 문에서 JOIN 도 나오기도 한다. 그래서 한 개씩 여기저기 들르면서 푸는 것을 추천한다. 실전 풀이 전략 SQL 관련 코테가 예정되어 있어서, 일단 실전 풀이 전략은 다음과 같이 세우기로 했다. 1. 일단 테스트 시험까지 응시해본 결과, 임시로 나오는 테스트케이스에 맞게 예제가 나오지 않는다.🥲 데이터를 눈으로 확인할 수 있는 방법이 있긴 하다.😏 SELECT * FROM TABLE명 ; 하면 얼추 나온다. 2. 백준처럼 맞았습니다!! 를 확인할 수 없다. 그래서 테스트케이스 답과 모두 일치함에도 불구하고 틀릴 수 있다.(조건 등을 하나씩 빼먹을 경우) 조건 하나하나 잘 파악해서 쓰자(성별, 카테고리 제한 ..
Spring Security는 Java 애플리케이션에서 인증/권한 부여 서비스를 제공하는 프레임워크이다. 이를 활용해서 소셜 로그인(카카오, 애플)을 구현해보았다. 이 글에서는 우선 Spring Security로 JWT를 구현하는 방법에 대한 글을 써보려고 한다. 일단 Spring Security는 그리 쉽지 않다.. 구현도 쉽지 않고, 찾아보니 이 쪽 영역을 제대로 공부하기 위해서 사람들이 시간을 잡고 공부하는 것 같았다. 그래서 공부방향을 코드에 대한 대략적인 JWT 작동 방식을 이해하고, 내가 나중에 확실히 또 써먹을 수 있도록 공부해보는 것으로 잡았다. 아래를 봐도 아주 복잡한 filter의 향연을 볼 수 있다 .. 인증 과정? Spring Security에서 JWT 인증 과정은 다음과 같다. d..
config>SecurityConfig에 다음 코드를 붙여놓는다. @Configuration @EnableSwagger2 public class SwaggerConfiguration { @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .useDefaultResponseMessages(false) .apiInfo(apiInfo()) .select() //모든 경로의 api를 사용한다. .apis(RequestHandlerSelectors.basePackage("com.example.umc3_teamproject")) .paths(PathSelectors.any()) .build() ; } private ApiInfo..
개요 일단 JWT에 대한 개념부터 알고가자! JWT는 JSON Web Token의 약자로, 로그인 인증 기능에서 사용하는 토큰을 만들 때 사용하는 기술이다. JWT를 구현하는 방법은 두 가지이다. 1. jwt-java 라이브러리를 사용하여 JWT를 생성하고 파싱하는 방법 2. spring security 라이브러리 이용하기 이번에 로그인 로직을 짤 때 일반 로그인은 1번으로, 소셜 로그인은 2번 로직으로 짜게 되어 JWT와 많이 친해질 수 있었다. 이번 글은 1번 방법에 대한 설명이다. 2번 방법(JWT+소셜로그인) 에 대한 설명은 이쪽에서 확인 가능하다. UMC 동아리에서 제공해준 템플릿 중 로그인 구현 방법 코드를 인용하였다. 아래 코드로 자세히 알아보자. service/JwtService.java ..
EC2를 배포하는 방법에는 여러가지가 존재한다. ec2+nginx와 ec2+docker 방식 중에 고민하다 후자를 선택했다. Docker란? Docker 사용방법 일단 도커란 무엇인가? 간단히 리눅스 컨테이너를 만들고, 사용할 수 있는 컨테이너화 기술 이걸 이미지?라고 통칭하는 것 같다. 도커 사용 방법 일단 docker 이미지 업로드로 먼저 시험해보자! 구글링 키워드 - docker 이미지 pull 실습 Docker Desktop을 깔아서 보면서 하면 좋다. 로그인할 때 github 이름으로 해야 함 주의 특히나 github 세미 이름..?? Youngseo-Jeon0313으로 하면 안되고 jeonyoungseo로 했어야 했다. 나중에 배포할 때에도 이름을 jeonyoungseo/umc3-server ..
SPRING의 가장 강력한 점은 IOC, DI에 있다. DI란, 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. @Bean 어노테이션과 연결지어 생각하는 것이 좋다. 우리는 @Bean을 만들어놓고 그 안에 방법2처럼 setter() 또는 생성자 등을 이용한다. 연결지어 Bean은 위 사진처럼 객체를 만들어서 활용하는 틀로 생각하면 좋다. Bean은 SingleTon으로 생성되는 것으로, Spring Framework에서 딱 한 개가 만들어진다. 그래서 우리는 이 틀 안에서 특성 값을 '특정' 해놓으면 안된다. 그런 방법보다 값을 생성자 또는 setter로 '할당'하자. IoC(제어의 역전)은, SPRIN..
ERD 및 API 설계 이제 서버를 실질적으로 구현해볼 시간이다! 일단 기능사항을 분석하여 ERD를 설계해야 한다. 우리 글에서 발견한 길 팀은 GUI를 보면서 필요한 기능사항을 분석하여 ERD로 표현하였다. 서로 놓치는 부분이 없게 하기 위해 회의로 즉각 진행하였다. 아래에 기억에 남는 내용들을 기록해보았다! delete 부분은 어떻게 처리할까요? 아예 DB 상에서 없애는 방법보다는 boolean 값으로 없앴다는 처리를 남기는 방법을 사용하기로 했다(soft delete) 다대다 관계의 것은 매핑테이블을 통해 1대 다 / 다대 1로 풀자. 즉 단방향으로만 관계를 표현하도록 노력하자. 이를 위해 매핑 테이블을 만들었다. id는 LONG으로, 티어(브론즈, 플래티넘 등)는 enum으로, 데이터 생성/수정시..
이번 1~2월 약 8주에 걸쳐 UMC 프로젝트의 PM을 맡게 되었다. 프레젠테이션을 많이 했어야 했던 경험에서 착안한 아이디어로 4주간 앱 기획을 진행했다. 아무래도 창조적인 부분이 많아서 평소 주입식 공부를 주로 하던 나에게는 생각보다 쉽지 않은 영역이었다..😥 그래도 지금은 제 아이디어에 꽤나 자신감이 생겼는데, 사람들에게 조언을 많이 구했던 것이 아이디어를 정말 많이 디벨롭할 수 있었던 큰 요인이었던 것 같다! 이번 1탄은 앱 런칭 프로젝트 기획에서 길을 헤매고 있는 사람이 읽으면 좋을 것 같다. 나도 나중에 또 아이디어를 내거나 앱 런칭 기회가 올 수 있으니 잘 정리해 두기로 했다! 1. 아이디어를 생각해내는 것 그 자체에 너무 부담갖지 말자. 그저 큰 사회문제를 작은 화면 안에 넣는 것일 뿐이다..
항공대학교 김철기 교수님 객프 수업을 정리한 내용입니다. 내가 나중에 보려고 쓴 거라 조금 난잡함 주의 🤐 자료 추상화가 가능하다. private 등으로 불필요한 정보는 숨기고 중요한 정보만 노출할 수 있다. 상속 연관된 클래스 간에 상하위 연관성을 둘 수 있다. 다형성 오버라이딩 override / 오버로딩 overloading 이 가능하다. -안전성 : 타입추론 가능, Null Pointer Exception 예방, Smart Cast를 통한 안전한 타입 변환 가능 -다중 패러다임 : 함수형 패러다임, 동시성 프로그래밍 -간결성, 표현력 좋음 -상호 운용성 / 다중 플랫폼 타입 추론이 가능하다. val n = 15 굳이 val n : Int = 15 로 쓰지 않아도 된다.! val text = "ap..
간단한 소개 아래 있는 내용을 구현하면 된다. 이 때 JAVA Convention, Commit Convention 등 지켜야 할 사항이 있다. 이번에 지켜보고 싶었던 사항들 1. 구현 전에 readme에 기능을 작성하고, 그에 맞춰서 commit해보기 2. 커밋 메시지를 자세히, 제대로 작성해보기 (읽어봤을 때 이해가 되도록) 3. 예외 사항(IllegalArgumentException) 또한 고려하며 기능목록을 작성하기 4. 주석처리 깔끔하게 해보기 5. refactoring 제대로 하여 반복되는 코드 없도록 하기 6. Test로 삼을 만한 더미 데이터 만들어보기 7. 일급콜렉션 적용시켜보기 위 내용으로 TDD 훈련해보기! TDD, 정의는 쉽고 체화는 참으로 어렵다. 정의는 쉽다. 테스트를 먼저 만들..
지원 내년엔 꼭 부트캠프를 해보고 싶은 마음이 있다. 다양한 사람들을 만나보고도 싶고, 구현해보고 싶은 서버 툴을 어떻게 짜야할지 감도 안 오는 수준에서 벗어나고 싶은 갈망이 컸다. 그래서 제일 먼저 모집하는 우테코를 지원해보기로 했고, 합격하지 않더라도 프리코스에서 많이 얻어갈 수 있다는 말에 솔깃해 지원하게 되었다. 10월 26일 (수) ~ 11월 22일(화)까지 4주간 일주일에 한 개씩 과제를 제출해야 하고, 제출했던 과제를 기반으로 12월 17일(토)에 코딩테스트 후 합격자를 발표한다. 1주차 과제 이번 우테코 1주차 과제에서 요구하는 것은 그리 어렵진 않았으나, 양이 조금 많다. 아무래도 양 때문에 시간을 갈아넣는 희생은 감수해야 하는 것 같다. 알고리즘 문제 7문제를 풀고, 이 문제들을 테스트..