CODING/스파르타 내일배움캠프 TIL

27_제일 작은 수 제거하기_키오스크 과제 해설_스탠다드 백엔드 개발자 필수 지식_25.1.20(월)

codingTrip 2025. 1. 20. 21:25

코트카타

29) 제일 작은 수 제거하기

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        if (arr.length == 1) {
            return new int[]{-1};
        }

        int min = Arrays.stream(arr).min().getAsInt();

        return Arrays.stream(arr)
                .filter(value -> value != min)
                .toArray();
    }
}

 

arr배열의 값이 1인 경우 -1 값을 리턴한다.

아닌 경우, 최소값을 찾는다.

arr을 stream으로 변환 후, 최소값이 아닌 값을 검색한다.

이를 다시 배열로 만들어 리턴한다.


키오스크 과제 해설

- 정답은 굉장히 다양할 수 있습니다.

- 개발은 쉽게 생각해야 합니다.

 

- 정확도가 필요한 경우에는 double이 아닌 BigDecimal을 사용하라

조회수, 추천수와 같은 경우에는 사용할 필요는 없다.

하지만, 돈 계산, 금액(price), 금융권과 같이 정확한 값이 필요할 때에는 BigDecimal을 사용하자

이유 : double은 15~16자리 정도로 용량 제한이 있어, 필연적으로 loss가 발생하기 때문

=> 따라서, 포트폴리오 작성 시, 회사에서 일할 때에는 BigDecimal을 사용하자

 

 

- 인텔리제이의 편의기능을 활용하자

- if문(예외로직) 확실하게 분리해서 코드의 가독성을 높이자

- Service로 분리하자

- 의존성

ex) A 남자 - B 여자

처음에는 이 여자를 몰랐지만 연애와 결혼을 하면서 의존성이 생김

 

CartService에 의존성 생김 - cart 주입받음(Cart cart)

Kiosk와는 의존성 관계가 아니다.

 

- cartItems를 Map <MenuItem, Integer> (메뉴 아이템, 개수)

 

- switch, while문 -> break;

   메서드 -> 나갈 때, return(종료)

메서드를 재사용하면 결합도가 낮아진다.


스탠다드반 세션

[Spring 5기] 백엔드 개발자 필수 지식

회사에서 좋아하는 개발자란

미국 빅테크 기업에서는 IQ가 140이상인 인도 개발자들이 코어를 담당한다

그러나 디자이너는 개발지식이 적다

우리는 이 사이를 연결하는 소통장치, 망치의 좋은 손잡이가 되자

 

신입기준 같이 일하고 싶은 사람은 Communication

이해, 문제해결 flow

 

백엔드와 프론트엔드 차이점

백엔드

  • 역할: 데이터 처리, 비즈니스 로직, 데이터베이스 관리 등 서버 측 작업을 담당.

프론트엔드

  • 역할: 사용자가 상호작용하는 UI와 UX를 개발.

클래스와 객체와 인스턴스 차이란?

클래스 :

클래스(class)란 객체(object)를 만들어 내기 위한 틀이며

만들어 낼 객체의 속성과 메서드의 집합을 담아놓은 것

객체 : 객체란 클래스로부터 만들어지는 실체, 클래스로 선언된 변수를 객체라 한다.

인스턴스 : 인스턴스(instance)란 객체가 메모리에 할당이 된 상태이며

런타임에 구동되는 객체를 말합니다.

객체와 같은 의미로 쓰이기도 합니다.

참고로 인스턴스는 AWS의 클라우드의 가상서버라는 말로도 쓰입니다.

 

static키워드는 왜 사용하며 단점은 무엇인가요?

static

static 키워드는 클래스의 인스턴스가 아닌 클래스에 속하며

클래스의 변수, 메서드 등을 공유하는데 사용됩니다.

이를 통해 해당 클래스로 만들어지는 객체사이에서 중복되는 메서드, 속성을 효율적으로 정의할 때 쓰이며

단순히 전역변수가 아니라 클래스내의 static 키워드로 선언하여

이 클래스의 객체들끼리 사용되는 메서드 또는 속성이다. 라는 것을 나타내주는

명시성이라는 장점이 생기기 때문에 씁니다.

 

static 단점

static 키워드로 선언된 변수, 블록, 메서드 등은 선언과 동시에

미리 heap영역이 아닌 Method area 메모리 영역에 할당이 되며

프로그램이 종료 될 때까지 GC에 의해 메모리가 회수되지 않기 때문에

만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비를 불러올 수 있습니다.

 

클라우드, 오프프레미스, 온프레미스

클라우드 : 클라우드 서비스는 내가 아닌 다른 회사의 공급자가 호스팅하고

인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어를 말합니다.

이를 이용하면 자체 인프라나 하드웨어 설치 없이도 애플리케이션과 리소스에 쉽고 싸게 이용이 가능합니다.

(분산된 서버를 기반으로 클라우드를 이용하는 모습)

AWS

 

이렇게 되면 서버를 직접 구매할 때 고려해야 할 전력, 위치, 서버 세팅, 확장성을 고민하지 않고 서비스 운영에만 집중할 수 있습니다. 이를 오프프레미스(off-premise) 방식이 라고 합니다.

서버 구매

 

온프레미스(on-premise)방식 : 이와는 반대로 온프레미스방식은 기업이나 개인이 자체 시설에서 보유하고 직접 유지 관리하는 프라이빗 데이터 센터(IDC)을 의미합니다.

자체보유

 

Iaas, Paas, Saas

Iaas : IaaS(Infrastructure-as-a-Service)는 인프라형 클라우드서비스입니다.

클라우드가 단지 인프라를 제공합니다.

node.js, MongoDB 등을 개발자가 직접 설치해야 하는 대신 특정 서비스에 종속되지 않습니다.

ex) AWS의 EC2, NCP 등 ex) NCP 사용법

남의 서비스 이용, 세팅, 코드 설정

 

Paas : PaaS(Platform-as-a-Service)는 플랫폼형 클라우드 서비스입니다.

클라우드가 플랫폼을 제공합니다.

Node.js, MongoDB 등이 설치되어있으며 그저 클릭을 통해 해당 서비스를 이용할 수 있습니다.

모니터링, CI/CD가 제공됩니다.

ex) heroku의 예 : 자유롭게 클릭 몇번으로 여러가지 서비스들을 설치가 가능함.

클라우드가 제공, 그냥 들어가서 설치, 사용, 모니터링, CI/CD

 

Saas : SaaS(Software as a Service)는 서비스형 클라우드서비스입니다.

완전한 서비스를 클라우드서비스로부터 제공받아 사용합니다.

ex) 슬랙 : 다른 컴퓨터에서도 쉽게 작업, 다른 사람과의 실시간 공유 작업이 가능

슬랙, 노션 같은 경우 다른 컴퓨터도 쉽게 작업, 공유 가능

 

PaaS와 IaaS 비교

IaaS

  • 유연하며 플랫폼에 종속되지 않습니다.
  • 이식성이 높음
  • 운영비 효율 낮음

PaaS

  • 유연하지 않으며 플랫폼에 종속됩니다.
  • 이식성은 낮음
  • 운영비 효율 좋음

필수!!!

데이터 교환 형식 !! JSON 직렬화 / 역직렬화

JSON

JSON(JavaScript Object Notation)은 Javascript 객체 문법 으로

구조화된 데이터교환형식, python, javascript, java 등 여러 언어에서 데이터 교환형식으로 쓰이며

객체문법말고도 단순 배열, 문자열도 표현 가능합니다.

키(key)과 값(value)으로 구성됩니다.

{
"name" : "David",
"name" : "Jason",
"name" : "Ryu"
}
name -> key
David,Jason,Ryu -> value

 

JSON 직렬화, 역직렬화

직렬화란 외부의 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술이며 역직렬화는 반대를 의미

ex) JSON.parse() , JSON.stringify()

출처 : 스파르타 내일배움캠프 스탠다드반 자료

 

JSON의 활용

JSON은 프로그래밍 언어와 프레임워크 등에 독립적이므로,

서로 다른 시스템간에 데이터를 교환하기에 좋습니다.

주로 API의 반환형태, 시스템을 구성하는 설정파일에 활용됩니다.

 

필수!!!

API 개념

통신방법, 중계 계층

API (API, Application Programming Interface)는

둘 이상의 컴퓨터 프로그램이 서로 통신하는 방법이자

컴퓨터 사이에 있는 중계 계층을 의미합니다.

 

예를 들어 A라는 컴퓨터가 요청을 하고 B라는 컴퓨터가 응답을 한다고 했을 때의

어떻게 통신할 것인지, 어떠한 데이터를 주고 받을 건지 등에 대한 방법(HTTP, HTTPS 프로토콜을 사용할 것인지, GET, POST 등의 방식 등..)이 정의된 중계계층을 말합니다.

 

참고로 API는 과거부터 발전되어온 용어로 라이브러리 및 프레임워크를 설명하는 명세서, 웹상에서 WEB API, Web Socket API 등을 가리키는데 현재를 기준으로 API라고 할 때 보통 WEB API를 기준으로 설명합니다.

 

인터페이스

접점, 경계면

인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면입니다.

이를 통해 해당 컴퓨터의 내부서버가 어떻게 구현되어있는지는 상관없이 인터페이스를 통해 통신 등이 가능합니다.

ex) 네이버 웹툰

저희는 네이버의 웹툰의 서버가 어떻게 되어있는지. 데이터베이스가 어떻게 되어있는지 알지못합니다.

그러나 이러한 인터페이스를 기반으로 웹툰의 서비스를 즐길 수 있습니다.

 

API의 작동방식

출처 : 스파르타 내일배움캠프 스탠다드반 자료

API는 다음과 같이 중계계층으로 끼어져있어서 작동을 합니다.

사용자가 브라우저를 통해서 서버에 요청을 하게 되면

API가 중계계층역할을 하며 요청을 처리하는 것을 볼 수 있습니다.

직접 서버의 데이터베이스에 접근 하는 것을 방지하기도 하는 것을 볼 수 있습니다.

 

API의 장점

  1. 제공자는 서비스의 중요한 부분을 드러내지 않아도 됩니다.
    예를 들어 DB 설계 구조나 드러내고 싶지 않은
    데이터베이스의 테이블 정보, 서버의 상수값 등을 드러내지 않고 드러내고 싶은 부분만을 드러낼 수 있습니다.
  2. 사용자는 해당 서비스가 어떻게 구현되는지 알 필요없이 필요한 정보만을 받을 수 있습니다.
  3. OPEN API의 경우 앱 개발 프로세스를 단순화 시키고 시간과 비용을 절약할 수 있습니다.
    ex) 로그인 : https://developers.naver.com/products/login/api/api.md
  4. 내부 프로세스가 수정되었을 때 API를 매번 수정하는 것이 아닌 API가 수정이 안 되게 만들 수 있습니다.
    이를 통해 내부 DB, 서버의 로직이 변경이 되어도 매번 사용자가 앱을 업데이트하는 일은 줄어들 수 있습니다.
    ex) DB튜닝
  5. 제공자는 데이터를 한곳에 모을 수 있습니다.
    예를 들어 예스24라는 책을 파는 쇼핑몰을 만들었다고 하면
    해당 사이트에 방문하는 방문자, 어떤 특정한 것을 클릭하는 사용자에 대한 이벤트를 집계하고 싶을 때
    해당 API를 만들고 해당 이벤트가 발생하면 해당 API를 호출하게 만들면 해당 데이터를 한 곳에 모을 수 있습니다.
    ex) yes24의 베스트셀러, 검색페이지에서의 사용자이벤트

API의 종류

  • private : 내부적으로 사용됩니다.
    주로 해시키를 하드코딩해놓고 이를 기반으로 서버와 서버간의 통신합니다.
    이는 비즈니스 파트너와도 사용될 수 있습니다.
    비밀스럽게 해당 파트너와 해시키를 공유해 통신합니다.
  • public : 모든 사람이 사용할 수 있습니다.
    많은 트래픽을 방지하기 위해 하루 요청수의 제한, 계정당 몇개 등으로 관리합니다.

네트워크

HTTP

HTTP(Hypertext Transfer Protocol)은 처음에는 서버와 브라우저간에 데이터를 주고 받기 위해 설계된 프로토콜입니다.

지금은 브라우저 뿐만 아니라 서버와 서버간의 통신할 때도 많이 이용합니다.

  1. HTTP는 헤더를 통한 확장이 쉽습니다.

예를 들어 헤더값에다가 어떠한 값을 넣어서 HTTP요청을 할 때 쉽게 다른 값을 추가할 수 있습니다.

  1. HTTP는 stateless합니다.

동일한 연결에서 연속적으로 수행되는 두 요청 사이에 연속적인 상태(state)값은 없습니다.

 

SSH

SSH(Secure Shell Protocol)는 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜 입니다.

보통 프라이빗 키가 있는 경로에서 이런식으로 키를 명시하고 실행합니다.

💡 ssh <pem> <user>@<serverIP>

 

습관 잘 들이자
설계부터 시작하자
왜 쓰는지 알고 쓰자
*얼마나 깊게 고민해보았나?
수치로 이야기하기