내가 읽은 글을 생각하고 정리해본 것 (사람마다 생각이 다를 수 있음)

 

소프트웨어(software)란? 

컴퓨터가 뭔가 유용한 일을 하게 해주는 일련의 명령어를 의미하는 일반적인 용어다.


Chapter 18  :  알고리즘과 초콜릿 레시피

알고리즘(algorithm)이란?

수학과 컴퓨터과학, 언어학 또는 엮인 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차이다.

 

알고리즘 이름의 유래

https://ko.wikipedia.org/wiki/%EC%BD%B0%EB%A6%AC%EC%A6%88%EB%AF%B8

 

콰리즈미 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 아부 압둘라 무함마드 이븐 무사 알콰리즈미(페르시아어: خوارزمی, 아랍어: ‏أبو عبد الله محمد بن موسى الخوارزمي‎, 780년? ~ 850년?)는 페르시아

ko.wikipedia.org

 

파인만 알고리즘이란?

미국의 유명한 물리학자인 리처드 파인만이 제시한 '일반적인' 문제 해결법이다.

 

  1. 문제를 적는다.
  2. 골똘히 생각한다.
  3.  답을 적는다.

 

ex)

  1. spring 입문 고민 
  2. 고민하면 해결할 수 있는 문제인가? 골똘히 생각해 본다.
  3. 고민한 결과는 적는다. 문제가 해결되면 OK 안되면 문제가 잘못 됬을 수 있으니 다시 1번을 간다.

 

 

알고리즘은 

결과를 정확하게 계산하도록 보장된 일련의 단계~ 즉, 어떤 일을 해결하려는 방법과 절차이다.

알고리즘을 이루고 있는 모든 구성요소의 의미에 한치의 모호함도 있어서는 안된다.

또한, 알고리즘은 결국 언제가는 멈취야 한다. 끝나지 않게 구현한 알고리즘은 '알고리즘'이 아니다.

 

 

 

알고리즘의 조건

알고리즘은 결과가 정확하게 계산되어야 하기에 5가지의 조건을 만족해야 한다.

  1. 입력 : 외부에서 제공되는 자료가 0개 이상 존재해야 한다. (입력되는 자료가 없으면 알고리즘이 실행되지 않는다.)
  2. 출력 : 입력을 받아 적어도 1개 이상의 출력이 있어야 한다. (입력이 있다면 반드시 출력도 있어야 한다.)
  3. 명확성 : 각 단계가 단순해야 하며, 모호하지 않아야 한다. (케이크 레시피를 들자면.. '오븐에서 30분, 또는 반죽이 자리 잡을 때까지 구우세요' 라고 말했다면 굽는 시간은 반드시 30분이어야 하나? 30분을 넘기면 안되나? 라고 조건이 모호해 진다. )
  4. 유한성 : 한정된 수의 작업 후에는 반드시 끝나야 한다. (알고리즘이 멈추어야 한다.)
  5. 효율성 : 알고리즘이 효율적이어야 한다. (모든 과정은 명백하게 실행 가능, 검증 가능한 것이어야 한다. 주어진 양의 데이터를 처리하는데 얼마나 시간이 걸리나)

 

그림 참조 : 휴몬랩 메이커


Chapter 19 : 반에서 가장 큰 사람 찾기 :  선형 알고리즘

반에서 가장 키 큰 사람 찾기~ 한명만 찾고 싶을때는 일일이 물어보고 가장 큰 사람만 기억하면 된다.

하지만 가장 큰 키가 같은 사람이 있다면??? 누구를 기록해야 하지?????

 

이런문제를 해결하려면 '자료구조'가 필요하다.

자료구조는 계산 과정에서 필요한 정보를 표현하는 방법이다. (지금은 이정도만 알아두자!)

 

예를 들어 전체 키의 평균을 계산하고 싶다면

종이에 N명의 키(height) 목록이 쓰여 있다고 가정할때


진짜진짜 너무너무 하기싫어


이 예시는 알고리즘의 조건인 입력, 출력, 명확성, 유한성, 효율성을 모두 만족한다.

 

하지만, 만약 종이에 아무런 정보가 없다면? 알고리즘 조건에 부합하지 않는다.

사람이라면 할 일이 없다는 것을 금방 알아차릴 수 있지만, 컴퓨터는 그렇지 못하다.

 

때문에, 데이터 항목이 없을 경우를 대비해서 컴퓨터에게 알려주어야 한다.

 



알고리즘에서 중요한 특성 중 하나는 아까 언급했던 얼마나 효율적으로 작동하느냐 이다.

 

방안의 사람의 수가 10명일때 이를 계산하는 알고리즘이 1초 걸리고,

20명일때 2초,

30명일때 3초,

x축을 데이터 항목의 수, y축을 실행시간이라고 했을때

이렇게 계산시간이 정비례하거나 선형(직선처럼 똑바른 도형)적으로 비례하는 것을 선형 알고리즘이라고 한다.

 

 

 

 

 

 

 

 

 

 

선형 알고리즘의 기본형태

  1. 먼저 초기화가 필요하다. (예를 들면 누적합계를 0으로 설정하거나, 가장 큰 키를 어떤 작은 값으로 설정하는 것이다.)
  2. 각 항목을 차례로 검사하고, 항목에 대해 간단한 계산을 수행한다. (수를 세거나, 비교하거나, 변환하거나)
  3. 작업을 끝내기 위한 어떤 단계가 필요하다 (예를들면 출력하는 것~!)

 

1. JPA ( Jakarta persistence API )

이전 Java Persistence API는 지속성과 관련이 있다.

JPA는 도구나 프레임워크가 아니고 오히려 구현자를 안내하는 일련의 개념을 정의한다.

JPA의 ORM(객체 관계형 매핑) 모델은 원래 Hibernate 를 기반으로 했지만 이후로 더 발전했다.

이전 JDBC나 Mybatis가 관계형 데이터베이스와 함께 사용할때 SQL Query문에도 신경을 더 써야했다면

JPA는 반복적인 CRUD SQL을 처리해주기에 ORM (SQL 중심이 아닌 객체 중심) 중심의 개발을 할 수 있다.

 

자바 ORM이란?

ORM이란 (Object-relational mapping)을 단순하게 표현하면 객체와 관계와의 설정이다.

ORM의 object는 OOP(Object_Oriented Programming)이다.

ORM 전에도 OOP사용은 자연스럽게 이루어졌지만 Custom Code를 작성하면서 OOP보다 SQL Query문 작성을

잘 하는 법이 더 중요해졌다. ORM이 나오면서 이러한 OOP다운 기본에 충실한 코딩에 더 신경을 쓸 수 있게 되었다.

그래도 복잡한 쿼리는 JDBC나 mybatis template 같은 연동모듈을 함께 사용해 구현하는 곳도 있다.

 

참조 : https://www.infoworld.com/article/3379043/what-is-jpa-introduction-to-the-java-persistence-api.html

 


JPA 사용 시 장점

1. 특정 데이터베이스에 종속되지 않는다.

오라클 데이터베이스나 Mysql 데이터베이스 등 여러 데이터베이스들의 Query문은 비슷하면서도 다른 점이 존재한다.

아마 JDBC나 Mybatis를 사용하고 있었다면 데이터베이스를 교체할 때 해당 데이터베이스에 맞는 쿼리문 또한 수정해야 한다.

하지만 JPA는 추상화한 데이터 접근 계층 방식이기에 설정 파일에 사용하는 데이터베이스 종류만 알려주면 데이터베이스 변경이

가능하다.

 

2. 객체지향적 프로그래밍

위에 한번 언급했듯이 데이터베이스 설계 중심에서 OOP 설계 중심으로 전환이 가능하다.

이를 통해 더 직관적이고 비지니스 로직에 집중할 수 있도록 도와준다.

 

3. 생산성 향상

ORACLE, Mysql 등 다른 데이터베이스 테이블에 컬럼을 추가했다면, 해당 테이블을 정의한 DTO 클래스의 필드를 모두 변경해야 한다.

하지만 JPA에서는 테이블과 매핑된 클래스에 필드만 추가한다면 관리가 가능하다.

 


JPA 사용 시 단점

1. 복잡한 쿼리 처리

일반적인 CRUD나 몇가지 조건이 필요한 작업은 JPA로도 충분히 가능하다. 하지만 복잡한 쿼리를 사용해야 할때 제약이 생기는데

이를 보안하기 위해서 JPQL을 지원하고 있다. 하지만 JDBC나 Mybatis 같은 연동 모듈을 사용해 SQL문법도

JPA와 같이 사용하는 곳도 있다.

 

2. 객체 간의 매핑 설계를 잘못했을때 성능 저하가 발생할 수 있다.

 

https://velog.io/@dev_zzame/JPA%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%9E%A5%EB%8B%A8%EC%A0%90%EC%9D%80-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C

 

JPA란 무엇인가, 그리고 장단점은 뭐가 있을까?

JPA(Java Persistence API)는 자바 ORM 기술에 대한 API 표준이다. ORM이란 Object Realational Mapping의 약자로 객체와 관계형 데이터베이스를 매핑해주는 것을 말한다. 그렇다면 ORM기술은 왜 나왔을까? JPA를 공

velog.io

 


2. Spring Data JPA

Spring Data JPA는 JPA를 쓰기 편하게 만들어 놓은 모듈이다.

JPA가 EntityManager로 데이터베이스에 접근했다면, Spring Data JPA는 Repository를 이용하여 데이터베이스에 접근한다.

JPA가 다른 SQL Query를 직접 작성하는 연동 모듈들 보다 코드가 더 간결하고 빠르게 코딩이 가능하지만 그래도 몇줄의 코드는 입력해야 하는데 Spring Data JPA를 사용하면 일반적인 CRUD는 한 줄의 코드 작성으로 완료될 수도 있다.

 

 

 

'Web Develop Log :' 카테고리의 다른 글

OSI 7계층 단순정리  (0) 2022.08.23
HTTP 프로토콜이란 무엇인가?  (0) 2022.08.10
WAS (Web Application Server)란 무엇인가?  (0) 2022.08.10
Client 와 Server 란 무엇인가?  (0) 2022.08.08
Ajax 에 대해서 알아보기  (0) 2022.07.15

생성자의 규칙 

  • class의 이름과 똑같은 이름으로 지어 주어야 한다.
  • return 값이 없다.
  • 생성자도 오버로딩이 가능하다
  • 생성자로 아무 값도 세팅해 주지 않았을때, 인스턴스는 멤버변수의 기본값을 갖게 된다.

상속

  • 기존의 클래스를 재사용하는 방식 중의 하나. 한번 작성한 코드가 재사용이 필요하다면, 변경사항만 코드로 작성하므로 상대적으로 적은 양의 코드를 작성하고 관리하기가 용이해진다.
  • 상속을 통해 클래스간의 계층구조를 만들게 된다.
  • 부모 클래스에서 정의된 필드와 메소드를 물려 받는다.
  • 새로운 필드와 메소드를 추가할 수 있다.
  • 부모 클래스에서 물려받은 메소드를 수정할 수도 있다.
  • 자식 클래스는 단 하나의 부모 클래스만 상속 받을 수 있다.

오버로딩

  • 한 클래스 내에서 동일한 이름의 메소드를 여러개 갖는 것
  • 오버로딩은 메소드 이름이 동일해야되고, 매개 변수의 개수나 혹은 type이 달라야 한다.

오버라이딩

  • 부모 클래스에 있는 메소드를 똑같이 자식 클래스에 정의하는 것이다.
  • 자식 클래스에서 정의한 내용으로 부모 클래스에서 정의한 메소드 내용을 덮어씌우는 것이다.

접근제어자

  • 접근 제어자는 멤버 변수/함수 혹은 클래스에 사용되며 외부에서의 접근을 제한하는 역할을 한다.
  1.  private : 같은 클래스 내에서만 접근이 가능하다.
  2. default(nothing) : 같은 패키지 내에서만 접근이 가능하다.
  3. protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서의 접근이 가능하다.
  4. public : 접근 제한이 전혀 없다.

추상클래스

  • 추상클래스란 추상메소드를 선언할 수 있는 클래스를 의미한다. 추상클래스 자체로는 인스턴스를 생성할 수 없다.
  • 무조건 자식 클래스에 상속되어야 사용이 가능하다. 

인터페이스

  • 객체의 특정 행동의 특징을 정의하는 것
  • 접근제어자, return type, 메소드 이름만 정의를 한다.
  • 메소드의 내용은 없다. 

https://developer.mozilla.org/ko/docs/Web/Guide/AJAX/Getting_Started

 

AJAX 비동기 자바스크립트와 XML(Asynchronous JavaScript And XML) 을 말합니다.

간단히 말하면 서버와 통신하기 위해  XMLHttpRequest 객체를 사용하는 것을 말한다고 한다.

 

XMLHttpRequest (XHR) 객체는 서버와 상호작용할 때 사용합니다. XHR을 사용하면 페이지의 새로고침 없이도 URL에서 데이터를 가져올 수 있습니다. 이를 활용하면 사용자의 작업을 방해하지 않고 페이지의 일부를 업데이트할 수 있다.

AJAX의 강력한 특징은 페이지 전체를 리프레쉬 하지 않고서도 수행 되는 "비동기성"입니다. 이러한 비동기성을 통해 사용자의 Event가 있으면 전체 페이지가 아닌 일부분만을 업데이트 할 수 있게 해줍니다.

 


 

데이터 형식

데이터를 전송하는데 있어 전송 형식은 여러 종류가 있지만, Ajax 통신에서 데이터를 전송하는 형식은 크게 세가지로 나뉜다.

바로 CSV, JSON, XML 형식입니다.

 

나는 XML 과 JSON 형식을 적어봐야겠다.

 

XML : CSV 형식의 가독성을 개선하기 위해 나온 데이터 형식이다. 태그로 속성과 데이터를 구분한다.

가독성은 좋지만 용량이 크며 데이터가 많아지면 분석속도가 오래걸린다는 단점이 있다.

 

JSON :  JavaScript의 객체 형태로 데이터를 전송하는 방법이다.

XML 과 CSV 의 단점을 최소화한 형식으로 현재 가장많이 쓰인다. 가독성도 좋고 용량도 적지만 데이터량이 많아지면 역시 분석속도가 떨어진다.

 

 


데이터 전달 방식

  • GET :  지정한 URL의 데이터를 열람하기 위한 메소드 (전송시 전송량이 적고, URL에 정보가 모두 담겨있는 단점이 있다.)
  • POST : 지정한 URL의 데이터를 생성하기 위한 메소드 (PUT, DELETE 메소드의 역할까지 담당이 가능하다.)
  • PUT : 지정한 URL의 데이터를 갱신하기 위한 메소드
  • DELETE : 지정한 URL의 데이터를 삭제하기 위한 메소드
  • HEAD : 지정한 URL의 헤더 정보를 요청하는 메소드

보안 및 특정 브라우저에서 PUT, DELETE 메소드를 지원하지 않는다.

 

단순히 데이터를 읽어 들어들이는 경우에 로그인 같은 경우 사용자의 아이디와 비밀번호만 데이터를 전송하면 되지만

GET 방식으로 전달시 사용자의 개인정보가 URL에 노출되므로 POST으로 정보를 전달한다.

 


Ajax 함수

자세한 사항은 김재훈님 블로그에서 더 많은 정보를 얻을 수 있습니다.

https://www.nextree.co.kr/p9521/

 

JavaScript, jQuery, 그리고 Ajax

Ajax는 Asynchronous JavaScript And XML의 약어로 언어나 프레임 워크가 아닌 구현하는 방식을 의미합니다. 데이터를 이동하고 화면을 구성하는데 있어서 웹 화면을 갱신하지 않고 필요한 데이터를 서버

www.nextree.co.kr

'Web Develop Log :' 카테고리의 다른 글

OSI 7계층 단순정리  (0) 2022.08.23
HTTP 프로토콜이란 무엇인가?  (0) 2022.08.10
WAS (Web Application Server)란 무엇인가?  (0) 2022.08.10
Client 와 Server 란 무엇인가?  (0) 2022.08.08
JPA, Spring Data JPA 차이점  (0) 2022.07.23

1. 프로젝트명

Beach Festival

 


2. 소개

무더운 여름철 한국의 모든 해변을 쉽게 찾고, 먼저 방문한 사람들의 평가도 한 눈에 볼 수 있는
웹사이트입니다.

 


3. 와이어 프레임

https://ovenapp.io/view/jJ07SeRQdJsKcNefK9JiJQxMiLOYOI0r/

 

1. Main 페이지

2. Detail 페이지

3. Login 페이지

4. Sign Up 페이지

5. My 페이지

 


4. 개발해야 하는 기능들

 

기능 Method URL request response
로그인 POST /api/login {'id': id, 'pw': pw} 환영합니다~ Name님
회원가입 POST /api/signup {'id: id', 'pw': pw, ....} 가입완료 메시지
목록 조회 GET /api/search   해변 리스트
글 작성 POST /api/mycomment/{id} {'name':name, 'img': img, 'comment':comment} 글 작성 완료 메시지
회원 업데이트 PATCH /api/update/{id} {'img':img} 수정 완료 메시지

 


5. public github repo 주소

https://github.com/ParkRio/BeachFestival

 

+ Recent posts