Spring Boot 기반의 프로젝트는 MVC 패턴을 따르면 코드의 구조화 및 유지보수성을 향상시킬 수 있다고 말을 하며 이전 포스팅을 마쳤다. 이번에도 해당 패턴을 적용할 것이다.아 근데 좀 말투가 너무 딱딱한가요? 아까 쓴 글을 보니 뭔가 너무 딱딱한 사람 같아서 뭐 네 그냥 존댓말로 하도록 하겠습니다. 각 패키지들이 MVC 패턴에서 무슨 역할을 하느냐를 간단히 짚어보겠습니다controllerController클라이언트의 HTTP 요청을 처리하고, 적절한 서비스 호출 및 응답 반환.entityModel (Entity)데이터베이스 테이블과 매핑되는 클래스 정의 (ORM 엔티티).modelModel (DTO/VO)데이터 전달 객체(Data Transfer Object) 또는 값 객체(Value Objec..
자세히보기동계 방학 중 현장실습을 하며 짬짬히 본인의 주식 포트폴리오를 구성하면, 보유한 주식들과 관련한 뉴스 정보들을 불러와주는 서비스를 간단하게 만들어봤다._(https://github.com/Mseunghwan/Ktor) 실습 기업에서 사용하던 Kotlin + Ktor 연습용으로 만든 프로젝트였는데, Java + Spring으로 그대로 카피한 프로젝트를 만들수 있을까? 하고 도전해보는 과정을 글로 작성한다. 여담으로, 주식 정보(이름, 가격, 시장 등)들을 가져오는 API는 처음엔 AlphaVantage를 활용하려 했으나 하루 호출량에 제한이 있어, FinanceDateReader(https://github.com/FinanceData/FinanceDataReader)를 활용했다. 제공해주신 개발자님께 ..
자세히보기플러터는 플러터나 혹은 여러 라이브러리로 제공되는 위젯들의 결합을 통해서 쉬운 프로그래밍을 지원한다. 그런데 플러터에서 사용하는 위젯은 불변한다는 원칙을 가지고 있다. 즉 위젯은 변하지 생성과 동시에 해당 상태를 변화시키지 않는다는 것이다. 하지만 코드를 수정하다보면 위젯을 변경시킬 때가 많은데, 불변의 법칙이 어겨진 것일까? 그렇지 않다. 프로그래머들은 코드 작성 시 코드를 변경한다고 생각하지만 실제로 플러터는 해당 위젯을 완전히 삭제하고 새로운 위젯을 새로 만드는 과정을 통해서 변경사항을 나타낸다. 예를 들면 아래에서 appBar 위젯을 통해서 Webview 라이브러리를 사용해 표현한 화면 상단에 ProCopier이라는 이름의 바를 하나 생성해놓고 색상을 회색에 가까운 색으로 설정한 것을 볼 수 있다..
자세히보기동기 프로그래밍 Synchronous Programming? / 비동기 프로그래밍 Asynchronous Programming? 동기 프로그래밍은 즉, 하나의 프로세스를 수행하다가 다른 프로세스의 요청이 들어가게 되면 CPU의 작동이 멈추고 해당 요청을 받는 프로세스로 이동하게 된다. 즉 CPU가 가지고 있던 프로세스와 받는 프로세스 간 동기화가 되어있는 것이다. 뭐 현재는 컴퓨터 속도가 빨라졌기 때문에 느리다는 체감을 받기는 힘들지만, 만약 서버요청과 같은 네트워크 상 어쩔 수 없이 시간이 걸리는 경우에는 빠른 컴퓨터 속도와는 다르게 시간이 오래걸려 사용자 경험이 크게 저해될 수 있다. 이를 방지하기 위해 비동기 프로그래밍은 어떠한 요청을 전달하면 바로 CPU를 보내는 것이 아닌 해당 요청에 대한 re..
자세히보기함수형 프로그래밍 Functional Programming? 일련의 코딩 접근 방식으로서, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변데이터를 멀리하는 프로그래밍 패러다임을 뜻한다 나도 솔직히 뭔 소린진 와닿진 않는다, 좀 객체지향 프로래밍과 대조적인 특징인데 다트는 객체지향 프로그래밍과 함수형 프로그래밍의 특징 모두 다 제공한다. 즉, 여러 함수들을 통해서 프로그래밍 할 수 있다는 것 1. List, Map, Set 자료형 변환 void main(){ List newJeans = ['해린', '민지', '하니', '다니엘', "혜인", '해린']; print(newJeans); print(newJeans.asMap()); // 리스트를 맵으로 변환 print(newJeans.toSet());..
자세히보기객체지향 프로그래밍(Object Oriented Programming, OOP)? 기존의 절차지향 프로그래밍과 다르게, 프로그램 구현에 있어 필요한 객체 각각의 집합으로 상호작용을 통해서 프로그램을 만드는 방식 플러터는 객체지향 프로그래밍 언어이다, 한 클래스와 해당 클래스로부터 파생된 개별 인스턴스가 있으며 내부에 여러 함수, 변수들로 구성된다. void main(){ Idol newJeans = new Idol(); print(newJeans.name); print(newJeans.members); newJeans.sayhello(); newJeans.introduce(); } // Idol class // name(이름) - 변수 // members(멤버들) - 변수 // sayHello (인사) ..
자세히보기Flutter 문법 정리 1. 자료형 dynamic과 var의 차이 : dynamic은 선언과 동시에 fixed되지 않기에 String값으로 선언하더라도 이후 int, double, boolean 등의 다른 자료형으로 값을 넣을 수 있지만 var은 어떤 자료형이든 일단 넣고 나면 선언과 동시에 fixed 되기에 이후 동일 자료형의 다른 값은 넣을 수 있지만 다른 자료형 값은 넣지 못한다. 2. 변수.runtimeType : 변수 자료형 리턴 3. nullable과 non-nullable : null이 들어갈 수 있는 자료형과 들어가지 못하는 자료형이 구별된다는 것, 만약 String? name = '뉴진스'; 하면 name은 nullable, 만약 print(name!);? --> name이 절대 nul..
자세히보기Bcrypt를 이용해 사용자정보 암호화하기 클라이언트로 부터 제공받은 정보들 중, 민감한 정보들은 암호화를 거쳐 데이터베이스에 저장되어야 한다. 보안 상 문제가 생길 때 사용자의 계정이 해킹당할 수 있다는 우려때문인데 이를 위해서 Node.js에서는 Bcrypt라는 모듈이 있다. npm install bcrypt --save 해주면 설치가 시작된다. 현재 register route를 확인해보면, app.post('/register', (req, res) => { // 회원 가입 시 필요한 정보들을 클라이언트에서 가져오면, 그것들을 DB에 넣어준다 // 그래서 유저 모델을 가져와야 const user = new User(req.body) user.save((err, userInfo) => { //저장시 에..
자세히보기계속 이어서, Node.js(Server) - HTML(Client) 소통설정(회원가입 예) Node.js는 클라이언트 측의 정보를 BodyParser을 통해서 가져오는데, 그냥 쉽게 얘기하면 HTML에서 사용자가 볼수 있는 Body부분에 정보를 입력하면 그 정보가 서버에 요청되고, 이러한 Body의 정보를 Parsing 해주는 뭐 그런거라고 생각하면 될 것 같다. node.js의 모듈로, body내 파라미터를 편리하게 가져오는데 도움을 준다. 더 자세한 내용은 아래 블로거분의 글이 명료하니 좋은 것 같다. https://medium.com/@chullino/1%EB%B6%84-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%86%8C%EA%B0%9C-body-parser%EB%A5%BC-%EC..
자세히보기Node.js는 자바스크립트를 서버사이드에서 사용할 수 있게 해주는 플랫폼으로서, 자바스크립트 런타임이다. 그리고 Node.js를 통한 어플리케이션을 도와주는 Express.js가 있다. React는 웹 어플리케이션 개발에 사용되는 프레임워크로, 프론트 엔드 사이드에서 사용된다. 우선 필자도 개발하고 싶은 서비스가 있기에, 이를 만들기 위해서는 리액트를 공부해야할 필요성이 있다고 생각했고 인프런 강의 중 Node.js와 React를 함께 다루는 강의가 있어 같이 공부해보려 한다. https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%85%B8%EB%93%9C-%EB%A6%AC%E..
자세히보기Segmentation --> Motivation? base and bound approach의 비효율성 --> 연속적인 물리적 메모리 공간에 매핑해야 한다는 점 --> 1. Wasted Memory 메모리 낭비 --> 2. Big Address Space Not Supported 여러 프로세스가 들어오면 다 못들어간다 --> 3. Duplicated Code Section 수행에 필요한 공통적인 코드가 겹치기에 공간이 낭비 Segmentation? --> 주소공간을 세그먼트로 나누고 각각의 세그먼트들을 독립적인 물리적 메모리에 매핑시키는 방법 세그먼트는 특정길이의 주소공간에서 연속적인 부분 --> Locally-defferenct segment : Code, Stack, Heap 존재 구현? 명시적 접..
자세히보기기존 OS --> 메모리에 한 프로세스만 로드할 수 밖에 없었다 --> 추상화 과정 없음, 한 프로세스는 모든 메모리를 한번에 차지 --> 낮은 cpu utilization과 효율성 --> Expensive Machines, But low utilization Multiprogramming and Time sharing --> 여러 개의 프로세스를 메모리에 로드가능 --> 한 프로세스를 잠깐씩 수행 --> 메모리 내 프로세스를 전환 --> utilization과 efficiency를 향상 --> 하지만 protection issue가 중요해졌다 --> 프로세스가 메모리 내 다른 공간에 엑세스하는 문제생길 수 --> 각 프로세스가 어디에 있고, 어떻게 수행?? --> 관리의 필요성 생김 Virtual Me..
자세히보기무결성(integrity)? 데이터의 정확성 또는 유효성을 의미 --> 실제로는 무결성 규칙을 정해놓음 무결성 규칙의 종류 - 도메인 무결성 규칙(domain integrity rules) : 주어진 애트리뷰트의 값이 그 애트리뷰트가 정의된 도메인에 속한 값이어야 한다는 것을 규정 - 릴레이션 무결성 규칙(relation integrity rules) : 어느 한 튜플이 릴레이션에 삽입 가능한가, 또는 한 릴레이션과 또 다른 릴레이션의 튜플들 간의 관계가 적절한가 SQL에서 무결성 규칙 정의 방법(3가지) 1. 애트리뷰트 제약 조건 [CONSTRAINT constraint] CHECK (cond-exp) constraint : 제약 조건의 이름 cond-exp : 제약 조건을 표현하는 조건식 ex : 애..
자세히보기데이터베이스 설계 데이터베이스 개발 생명 주기(Life Cycle) 요구사항 분석을 기초로 데이터베이스 구조를 작성하는 과정 --> 문제가 발생되면 피드백을 받아 적절한 단계로 되돌아가 다시 시작 데이터베이스 설계 시 고려사항 - 무결성(integrity) : 변경 연산 후에도 제약조건 만족 - 일관성(consistency) : 데이터 간, 응답간의 일치 - 회복(recovery) : 장애 발생 시 일관된 상태로 복구 - 보안(security) : 불법 접근의 방지 - 효율성(efficiency) : 응답시간 / 저장공간 최소화, 생산성 향상 - 확장성(extensibility) : 운영에 지장없이 새로운 데이터의 계속적 추가 요구사항 분석 --> 사용자의 요구사항을 수집하고 분석하여 공식적인 요구사항 ..
자세히보기잘못 설계된 데이터베이스? 이상현상? - 삭제이상 --> 학번 3654 고영준 학생이 과목 'CO234'의 등록을 취소할 때 --> 4학년이라는 정보도 함께 삭제됨 --> 연쇄 삭제에 의해 정보가 영원히 손실되는 현상 - 삽입이상 --> 학번이 7654이고 학년이 3인 학생을 삽입할 때 --> 어떤 과목을 등록하지 않는 한 삽입이 불가능(학번, 과목코드가 기본 키) --> 과목 정보가 없는데도 불구하고 입력할 수 없는 이상 현상이 발생 - 갱신이상 --> 학번 4652인 학생의 학년을 4에서 3으로 변경하려고 할 때 --> 학번 4652에 대한 4개의 튜플 모두를 변경해야 함 --> 중복 데이터의 일부만 갱신으로 정보의 모순성이 발생 이상현상의 원인과 해결책 --> 이러한 현상이 발생되는 이유? --> ..
자세히보기SQL? 1974년, IBM연구소에서 System R이라는 관계형 DBMS를 연구할 때 관계형 대수와 관계형 해석을 기반으로 개발 된 데이터 언어 처음엔 SEQUEL이라 불렀지만 이후 SQL이라는 이름으로 --> 관계형 데이터베이스의 표준언어로써 --> 상용 DBMS인 IBM DB2, MS-SQL/Server, ORACLE, MySQL, PostgreSQL등과 같은 모든 주요 제품에서 채택되고 있다 SQL의 특징 --> 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)등 모든 기능 제공 --> 터미널을 통한 대화형 질의어와 Java, Visual Basic, C, C++등과 같은 고급 프로그래밍 언어 내에 SQL이 삽입된 형태로 사용이 가능 테이블을 생성하고 정의하거나 새로운 애트..
자세히보기데이터? 현실세계로부터 단순한 관찰이나 측정을 통해서 수집된 사실이나 값 --> 숫자는 물론이고 문자, 이미지, 영상등을 포함함 --> 데이터는 처리되지 않은 값이고 정보는 데이터를 처리하여 얻은 값 --> 정보의 유용성을 위해서는 데이터가 정확하고 최근의 것이어야 함 정보? 의사결정을 할 수 있께 하는 지식으로서 데이터의 유효한 해석이나 데이터 상호간의 관계를 말함 --> 정보는 데이터를 처리해 얻은 결과 --> 즉, I = P(D) --> Information = Processing(Data) --> 정보 추출 방법을 데이터 처리(Data Processing) 또는 정보처리(Information Processing)라고 한다 * 데이터는 현재의 당면한 문제와 관련되고 필요시 언제나 이용될 수 있도록 ..
자세히보기Process Scheduling : ready queue 내의 프로세스들의 순서를 정하는 것 --> multi programming OS의 바탕 --> CPU scheduling, Job scheduling 이라고도 함 어떤 스케쥴링이 가장 좋은가? - user-oriented : Turnaround Time(TAT), Response time, Deadline,, - system-oriented : Throughput, Processor utilization - Fairness, ,,, TAT : 어떠한 프로세스가 시작해 끝날 때 까지의 시간 Response time : 무언가를 실행했을 때 첫 번째 반응이 올때 까지의 시간 Throughput : 서비스 제공자가 중요히 여기는, 얼마나 규칙적으로 잘..
자세히보기CPU virtualization : OS에 구현 하는데, time sharing이 대표적 --> 구현을 위해 필요한 두 가지 1. low level mechanism(how) : 수행 중인 프로세스를 멈추고, 다른 프로세스를 수행할 수 있게 하는 매커니즘 ex. context switch 2. policy : 다음 사용권한을 어떻게 줄지 결정해야 하는 policy ex. scheduling policies 프로세스 : 하드디스크에 있던 데이터가 메모리에 올라 실행할 수 있게 된 상태 - 즉, 메모리에 있다 life 있음, 메모리에 올라오면 탄생, 이후 수행 프로그램 : 코드(명령)의 집합 '실행가능 파일' - 하드디스크에 즉 디스크에 존재 life 없음, 그냥 존재 process creation -->..
자세히보기어플리케이션 소프트웨어 : 고급언어로 작성된 것 --> 고급 언어가 low-level language로 --> 하드웨어에서 알아먹을 수 있게 시스템 소프트웨어 : 컴파일러 --> HLL코드(High level language코드)를 기계어로 --> Operating system : 하드웨어 관리를 추상화 --> 입출력관리 / 메모리와 스토리지 관리 / task 스케쥴링과 리소스할당 즉, OS는 시스템 소프트웨어의 일종 인터페이스? 유저가 사용하는 대상 내부 디테일을 몰라도 쉽게 사용할 수 있도록 연결시켜주는 것 --> OS는 하드웨어를 모름에도 불구하고 메모리 관리등을 가능하게 하기에 인터페이스라고 볼 수 있다 OS의 두 가지 관점 --> 하드웨어 자원을 효율적으로 관리 --> 1. 성능 최대화 --> ..
자세히보기지난 5개월 전, 대학교 4학년 생활을 하면서 해커톤에 한번 나갔다. 그떄 만든 금연 앱의 프로토타입이 은근 잘 만들어져서 이를 플레이스토어에 게시해야겠다 ! 생각했었다. 이후 4학년 1학기를 하며 코틀린 앱 프로그래밍 과목을 통해서 만든 앱도 잘만 개선하면 매력적인 앱이 될거라 생각해서, 아 학기 끝나고 두개 다 배포하고 4학년 스펙으로 야무지게 써먹어야 겠다 생각했다. 그때까지만 해도 이 모든 과정이 쉬울줄 알았다.. 현장실습을 하면서 만난 학우분과 이런저런 얘길하다 앱 배포얘기가 나와서 아 맞다 싶어서 해보려했다. 근데 그분께서 하시는 말씀이 작년정도 부터인가 정책이 바뀌어서 비공개 테스트를 해야한다고, 20명 정도를 14일간 내 앱을 설치하게 해야한다.. 라고 하셨다. 다행히 지금은 14일간 12..
자세히보기약 20일 전, 필자는 잘 쓰고있던 맥북 프로 M1의 화면에 이물질이 신경쓰였었다. '스테인게이트'라고 불리는 맥북의 고질적인 문제였는데, 실은 그런거 생각 많이 안하고 살아서 그냥 덮고 살았었다. 어차피 모든 전자기기는 수명이 있고 수명동안 잘 쓰면 버리면 된다는 주의였기에. 근데 기업 현장실습을 나가 활동하며 동기분들 컴상태를 보니 내 맥북이 속만 멀쩡하지 겉은 거의 쓰레기 상태라는걸 깨달아서 좀 지워야겠다 고민했다. 그래서 물티슈와 알콜솜이 제격이라고 하시길래 나도 벅벅 닦았는데 이게 무슨일인가, 화면은 아주 쌈봉해졌으나 화면안에 조금 들어갔는지 약간 노이즈가 발생하기 시작했다. 좀 쎄게 닦긴 했는데 이렇게 노이즈를 발생시키는 맥북을 보니 한심했다. 이래서 노트북은 좀 맞으면서 자라야한다. 안그래도..
자세히보기지난 해 9월 ~ 올해 8월 중순 까지 모종의 이유로 계속 살아왔던 대구를 떠나 서울에서 살았었다.그 사이 많은 재미있는 스토리와 경험을 했던 나는 이제는 다시 대구로 오게 되었다. 졸업까지 남은 1년 ~ 1년 반의 시간을 이곳에서 보내야 하기 때문이다. 그덕에 지난 해 만나게 된 여자친구와는 장거리 연애가 되어버렸고 우리는 그 동안의 기간동안 서로의 미래를 위해 열심히 의지하고 힘내기로 다짐했다. 삼촌 집에 적을 두고 등하교를 해야하기에 누나가 원래 들어갔었던 방을 정리하고 새 침대와 데스크를 셋업하고 나만의 공간으로 만들었다. 그래서인가 기존에 이 집에 들를때 마다 보았던 방과는 조금 다른 분위기가 되었다. 그래서 기분이 좋은 시작이다.사랑하는 애인과 떨어질 땐 많이 슬펐지만, 그래도 한 달에 한 번..
자세히보기END OF THE WORLD | 메이트 - 아니야 2014 Mate EP END OF THE WORLD - 아니야 음악소개의 이유 "실망하기 싫어 기대하지 않는다" 는 말을 주로 하는 필자는 타인에게 있어 항상 적정선의 기대를 가지려고 한다. 기대 정도의 차이가 있다면 그 사람이 내게 어떤 사람이냐에 따라 나뉜다고 할 수 있다. 일종의 바운더리를 정해두고 "이 사람은 어떤사람, 이 사람은 어떤사람 하며 적당한 분류작업이 이루어지면 그 사람에게 그에 맞는 기대를 한다고 할 수 있다. 다만 이러한 분류과정이 통하지 않는 소중한 몇몇 사람들이 있다. 그러한 사람들에게는 적당선의 기대를 하기가 힘들어서 항상 기대 정도에 미치지 못하면 실망하고 혼자 씁쓸해 하는 악습관이 언젠가부턴가 생겨났다. 그래서 사랑하는 ..
자세히보기2023년 12월 말의 내 모습을 돌아보며 현재 생각들을 디지털화 시켜보고 싶어 노트북을 키게 되었다. 난 무엇을 하고 있고 인생 어느부분을 살아나가고 있는지. 어떤 용감한 결정을 했고 어떤 책임을 하고 있는지. 어떤 사람을 만나 어떤 추억을 만들어 가는지 따위의 생각들이 연말의 내 머릿속을 가벼우면서도 시리게 스쳐지나간다. 난 4개월 전 부터 타지에 와 아름다운 시간들을 많이 만들었다. 꼭 와인잔과 장미꽃이 없어도 낭만을 챙길 수 있었던 나날들. 이후에도 계속 만들어 갈 것이다. 그와 동시에 필자는 최근 스스로에 대한 생각에 많이 잠긴 듯 하다. 그러한 생각을 털어내고 출근길 모서리로 대충 쌓여진 더럽혀진 눈뭉치들과 차가우리라 느껴질 만큼 푸른 창공이 담긴 일상에 집중하기 위해서 잡담을 배설한다. 이영..
자세히보기