반응형
문제:
문자열 my_str과 n이 매개변수로 주어질 때,
my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/120913

 

풀이보기
더보기
function solution(my_str, n) {
    let result = [];
    
    for(let i = 0; i < my_str.length; i+=n) result.push(my_str.slice(i, n + i));
    
    return result;
}

엄청 간단한 문제이므로 별다른 풀이는 없다!

i는 n만큼 증가시키니까 str을 i부터 n + i까지 슬라이스해서 reulst에 넣어주면 된다.

 

반응형
반응형

 

REST API란?

    자원(Resource)을 정의하고, 그 자원을 처리하는 방식(HTTP Method)을 명확히 구분하여 클라이언트와 서버가

     일관된 규칙으로 소통할 수 있도록 만든 아키텍처 스타일이다.

     * REST = REpresentational State Transfer

     * API = Application Programming Interface

    REST API는 보통 HTTP 프로토콜을 기반으로 만들어지며, 브라우저, 앱, 프론트엔드와 백엔드 간의 데이터 교환에 널리 사용된다.


REST API의 특징
특징 설명
무상태성(Stateless) 요청마다 상태를 유지하지 않음 (쿠키, 세션 X)
자원 중심 URL로 자원을 명확히 표현
일관된 규칙 HTTP 메서드를 의미에 맞게 사용
클라이언트-서버 분리 프론트와 백엔드가 독립적으로 개발 가능

REST API 구성 요소
구성 요소 설명
자원 (Resource) 정보를 표현하는 대상으로, URI를 통해 식별됨. (예: /users, /products)
메서드 (Method) 자원에 대한 동작을 정의 (예: GET, POST, PUT, DELETE)
표현 (Representation) 자원의 상태를 전달하는 형식, 대부분 JSON이나 XML로 표현됨
URI (Uniform Resource Identifier) 자원을 식별하는 경로 (예: /users/1는 ID가 1인 유저를 의미)
상태 코드 (HTTP Status Code) 요청 처리 결과를 알려줌. (예: 200(성공), 404(없음), 500(서버오류) 등)

REST API 설계 시 주의할 점 ⚠️

 

1. 자원 중심 URI 설계

  • URI는 명사로 구성
  • ❌  /getUserInfo, /deleteProduct
  • ⭕️  /users, /products

 

2. HTTP 메서드를 의미에 맞게 사용

동작 메서드 설명
조회 GET 자원 가져오기
생성 POST 새 자원 추가
수정 PUT 자원 전체 수정
부분 수정 PATCH 자원 일부 수정
삭제 DELETE 자원 삭제

 

3. 일관된 응답 포맷 사용

{
  "success": true,
  "data": { ... },
  "message": "요청에 성공했습니다"
}

 

4. 상태 코드 제대로 쓰기

코드 의미 비고
200 OK 요청 성공
201 Created 자원 생성됨
400 Bad Request 잘못된 요청
401 Unauthorized 인증 실패
404 Not Found 자원 없음
500 Internal Server Error 서버 오류

REST API에 대해 정리하다보니 문득 HTTP를 정리했을 때와 비슷한 느낌을 받았다.

그렇다면 REST API와 HTTP의 차이점은 뭘까?


HTTP와 REST API의 차이 요약

 

  • HTTP = 통신 방법 자체 (전화기)
  • REST API = HTTP를 "어떻게" 쓸지에 대한 규칙 (전화 예절)

 


HTTP와 REST API 비교
구분 HTTP REST API
역할 웹에서 요청/응답을 주고받는 통신 규약 HTTP를 기반으로 자원 중심의 API를 설계하는 방식
범위 더 넓음 (REST 말고도 SOAP, GraphQL 등 사용 가능) 더 좁음 (HTTP 위에서 동작하는 방식 중 하나)
개념 프로토콜 (어떻게 말할지의 기본 약속) 아키텍처 스타일 (말할 때 어떤 형식으로 할지의 규칙)
메서드 사용 GET, POST, PUT, DELETE 등 제공만 함 이 메서드들을 "자원 중심"으로 알맞게 활용하도록 정의

[HTTP에 대해서 자세히 알고 싶다면 아래 글 참고!] ⤵️

https://y-flm.tistory.com/81

 

[CS] HTTP(Hyper Text Transfer Protocol)란?

HTTP(Hyper Text Transfer Protocol)란?    웹에서 정보를 주고 받기 위한 프로토콜을 말하는데, 한마디로 웹 브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 방법이다.⚠️ 여기서 잠깐, 프로토

y-flm.tistory.com

 

반응형
반응형
문제:
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, 
my_string에서 'A'의 개수, ..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, ..., my_string에서 'z'의 개수를
순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/181902

 

풀이보기
더보기
function solution(my_string) {
    const alphabet = Array.from({ length: 52 }, (_, i) => String.fromCharCode(i < 26 ? 65 + i : 97 + (i - 26)));
    const str = Object.fromEntries(alphabet.map(char => [char, 0]));
    
    for(let char of [...my_string]) {
        str[char] += 1;
    }
    
    return Object.values(str);
}

먼저 알파벳 대문자, 소문자가 담긴 배열을 만들어준다.

그 후 알파벳과 개수가 담긴 str 객체를 만들고, my_string을 순회하며 str 객체 키에 해당하는 값이 있으면 +1을 해준다.

마지막으로 객체를 values 값만 담긴 배열로 변환해서 반환해주면 끝! 

 

반응형
반응형

 

MPA(Multi-Page Application)란?

     페이지가 여러 개로 구성되어 있고, 사용자가 어떤 링크를 클릭하면 브라우저가 서버에 새 HTML 페이지를 요청하고,

     전체 페이지를 새로 로드한다. (각 페이지마다 별도의 HTML, CSS, JS 파일이 있음)

 

[작동 방식 ⚙️]
1) 사용자가 만약 /about을 클릭하면,
2) 브라우저는 서버에 /about 요청을 보내고,
3) 서버는 완전히 새로운 HTML 페이지를 다시 보냄.
4) 기존 페이지는 새로고침되고, 새로운 페이지가 열림.

MPA의 장단점은 뭘까?

 

장점 단점
- SEO에 유리 (서버가 완성된 HTML을 보내주기 때문에 크롤링 쉬움)  - 페이지 이동 시 전체 새로고침 => UX 저하
- 간단한 구조 (전통 방식이라 이해하기 쉬움) - 개발 시 중복 코드가 많아질 수 있음
-페이지가 완전히 분리되어 있으므로 보안상 이점이 있음 - 클라이언트 측 동적 인터랙션 구현이 복잡

SPA(Single Page Application)란?

     하나의 HTML 파일로 구성되어 있고, 최초 로딩 시 모든 JS, CSS, HTML을 로드한다.

     사용자가 이동하는 페이지는 사실 컴포넌트 단위의 동적 화면 전환으로, 페이지 전환처럼 보이지만 실제로는 전체 페이지 리로드가 없다.

 

[작동 방식 ⚙️]
1) /about을 클릭하면,
2) 브라우저는 서버에 HTML을 요청하지 않음.
3) 자바스크립트가 내부적으로 URL을 변경하고, 필요한 데이터만 비동기로 불러와서 화면을 동적으로 렌더링

SPA의 장단점은 뭘까?

장점 단점
- 빠른 사용자 경험 (페이지 전환 시 부드럽고 빠름) - 초기 로딩 속도가 느릴 수 있음 (전체 JS 파일을 다 받아오기 때문)
- 클라이언트에서 다양한 동작을 할 수 있어 앱처럼 사용 가능 - SEO 불리
   (크롤러가 자바스크립트를 제대로 실행하지 못하는 경우가 있음)
     → SSR or SSG로 해결
- 컴포넌트 재사용성 ↑ → 유지보수 효율 ↑ - 복잡한 상태 관리 필요
   (라우팅, 인증 등 모두 클라이언트 측에서 처리)

MPA와 SPA 요약 비교 🔍
항목 MPA SPA
페이지 수 여러 개 한 개
새로고침 매번 새로고침 없음 (동적 렌더링)
SEO 좋음 나쁨 (대체 기술 필요)
속도 느릴 수 있음 (전환 시) 빠름 (전환 부드러움)
구현 복잡도 낮음 상대적으로 높음
사용 기술 전통적인 서버 렌더링 프론트엔드 프레임워크 중심 (React 등)

 

반응형
반응형
문제:
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다.
자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/120836

 

풀이보기
더보기
function solution(n) {
    let result = [];
    
    for(let i = 1; i <= n; i++) {
        if(n % i === 0) {
            result.push([i, n / i]);
        }
    }
    
    return result.length;
}

1부터 n까지의 수 중에서 만약 n이 i와 나누어 떨어진다면, result에 i와 n / i 값을 push 해준다.

그 후 result의 길이를 리턴해주면 끝!

 

반응형
반응형

 

.js 란?

    .js는 자바스크립트의 파일 확장자이며 일반적으로 사용하는 순수 자바스크립트 코드가 들어간다.

    브라우저가 이해할 수 있는 코드이고, 리액트를 쓰지 않아도 문제 없는 파일 형식이다.

 

[예시 코드]

function sayHello(name) {
  console.log("Hello, " + name);
}

sayHello("John");

.jsx 란?

    .jsx는 JavaScript XML의 약자이며 자바스크립트 코드 안에 HTML과 비슷한 문법을 쓸 수 있게 해주는 확장자이다.

    주로 React에서 사용되며, JSX 문법을 사용하면 마치 HTML처럼 UI를 구성할 수 있다.

    하지만 브라우저는 JSX를 이해하지 못하므로 컴파일 변환이 필요하다.

      * .js에서도 JSX 문법을 사용할 수는 있음!

[개념 알고가기 💡]
1. XML(eXtensible Markup Language)이란?
    확장 가능한 마크업 언어로, HTML처럼 태그로 데이터를 표현하지만 HTML보다 훨씬 더 유연하고 데이터 중심적이다.
    원래는 데이터 저장/전송용 포맷으로 만들어졌으며, 특징은 다음과 같다.
    1) 사용자가 직접 태그를 정의 가능
    2) 구조적 데이터 표현에 적합
    3) 사람도 읽기 쉽고, 기계도 파싱하기 쉬움
    * 단순히 데이터를 표현하는 방법이며, 실제 동작은 하지않고 데이터를 설명하는 "형식"이다.

    * 따라서 JSX는 JavaScript XML이란 이름이지만, 실제로는 XML이 아니고 XML처럼 생긴 문법 자바스크립트에 끼워 넣은 것이다.

 

[예시 코드]

export default function Hello() {
  return <h1>Hello, world!</h1>;
}

 

.js 확장자에서도 JSX 문법을 사용할 수 있는데, 왜 굳이 .jsx로 사용하면서 컴파일 변환을 해줘야하는거지?

.js에서도 JSX를 사용할 수 있는 이유

 

    그 이유는 Babel이나 Webpack 같은 빌드 도구가 .js 파일 안에서도 JSX 문법을 인식하고 변환해줄 수 있게 설정되어 있기 때문이다.

    그렇기 때문에 .js 파일에서 JSX 문법을 사용한다해도, 브라우저는 애초에 JSX를 이해하지 못하기 때문에 컴파일 변환은 일어난다.


그렇다면 .jsx로 확장자를 지정해주는 이유는 뭘까?

     1) 가독성: JSX가 들어있다는 걸 파일 이름만 보고 바로 알 수 있다.

     2) 협업: 다른 개발자에게 "이 파일은 리액트 컴포넌트입니다"라는 신호를 준다.

     3) 에디터 지원: .jsx 파일은 대부분의 에디터가 JSX 문법 강조를 더 잘 지원한다.

     => 즉, 기술적으로 꼭 .jsx를 써야 하진 않지만, 명확한 의도를 전달하는 좋은 습관이 될 수 있다!


 

그렇다면 컴파일 변환은 어떻게 일어나는 걸까?

JSX의 컴파일 흐름

 

1) JSX 코드 작성

const element = <h1>Hello</h1>;

 

2) Babel이 JSX 코드를 자바스크립트로 변환

const element = React.createElement("h1", null, "Hello");

 

3) 변환된 코드는 브라우저에서 실행 가능!


무엇이 컴파일을 해주는 걸까?
[Babel (JS 변환기)]
  - JSX → JavaScript
  - ES6+ → ES5
  - TypeScript → JavaScript
[Webpack (번들러)]
  - 여러 JS 파일들을 하나로 묶고 Babel을 연동해서 변환 과정을 처리하게 함

 

그렇다면 실제 개발 흐름은 다음과 같다.

[개발 흐름 🔍]
1. 소스 코드 작성 (.jsx, .ts, 최신 문법)
2. Babel이 변환 (JSX → 일반 JS)
3. Webpack이 번들링 (여러 파일 → 하나의 main.js)
4. 브라우저는 변환된 JS만 실행

.js 와 .jsx 차이점 요약
항목 .js 파일 .jsx 파일
목적 일반 자바스크립트 코드 JSX 문법을 포함한 자바스크립트 코드
사용 환경 전통적인 웹/서버/Node 등 어디든 가능 주로 React에서 컴포넌트를 만들 때 사용
JSX 사용 가능 (하지만 명확하지 않음) 가능 + JSX가 포함된다고 명확히 표시
컴파일 필요 여부 JSX가 없으면 바로 실행 가능 반드시 Babel 등의 변환이 필요
추천 사용처 유틸 함수, API 로직, 설정 파일 등 React 컴포넌트 작성할 때

 

 

 

반응형
반응형
문제:
랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다.
적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후,
지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.
이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다.

정수 배열 arr가 주어집니다.
문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때,
완성될 배열을 return 하는 solution 함수를 완성해 주세요.
단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/181858

 

풀이보기
더보기
function solution(arr, k) {
    let result = [];
    
    for(let num of arr) {
        if(!result.includes(num)) result.push(num);
        if(result.length === k) break;
    }
    
    while(result.length < k) {
        result.push(-1);
    }
    
    return result;
}

엄청 간단한 문제를 가져왔다!

먼저 result에 중복되지 않는 수를 넣어주고, 만약 result의 길이가 k와 같아진다면 반복을 멈춘다.

그 후 길이가 k만큼 충족되지 않는다면 해당 수만큼 반복하여 -1을 넣어주면 끝!

 

반응형
반응형

 

렌더링이란, 웹 페이지의 내용을 눈에 보이게 만들어주는 과정을 말한다.

렌더링 방식화면을 만들기 위한 데이터와 구조(HTML)을 누가 언제 준비하냐에 따라 다르다.

각 렌더링 방식에 대한 느낌을 정리해보자면 다음과 같다.

 

  • CSR은 "브라우저야, 이 JS로 페이지를 직접 만들어!"
  • SSR은 "서버가 만들어줄게. 브라우저는 그냥 보여줘!"
  • SSG는 "미리 만들어둘게. 나중에 그냥 보여줘!"

그렇다면 각 렌더링 방식에 대해 자세히 알아보자!

 


CSR(Client Side Rendering)이란?

    클라이언트에서 페이지 내용을 만드는 방식으로, 사용자의 브라우저가 서버로부터 데이터를 받아와서 웹 페이지를 직접 생성한다.

[CSR의 동작 과정]
1) 사용자가 웹 사이트에 접속하면 서버는 빈 HTML과 JavaScript 파일을 보냄.
2) 브라우저가 JavaScript를 로드하고 실행
3) JavaScript가 동적으로 HTML을 생성하고, 이를 브라우저에 표시
4) 추가 페이지 요청 시, 전체 페이지를 다시 로드하는 대신에 필요한 데이터만 서버에서 받아와 해당 부분만 업데이트
   → 즉, CSR은 서버로부터 빈 접시(빈 HTML)와 요리 재료(JavaScript)를 받고 요리(렌더링)를 직접 하는 방식

그럼 CSR을 사용했을 때의 장점과 단점은 뭘까?

 


SSR(Server Side Rendering)이란?

    서버에서 HTML을 완성시킨 후 브라우저로 보내는 방식이다.

[SSR의 동작 과정]
1) 사용자가 웹 사이트에 접속하면 서버에서 해당 페이지에 필요한 HTML 생성
2) 서버는 생성된 HTML을 브라우저로 보낸다.
3) 브라우저는 받은 HTML을 표시
4) 추가 페이지 요청 시, 해당 페이지에 대한 HTML을 다시 서버에서 생성하여 보낸다.
   → 즉, SSR은 서버에서 요리(웹 페이지 렌더링)를 완성시킨 후 접시에 담아서(완성된 HTML) 손님(사용자)에게 제공하는 방식

그럼 SSR을 사용했을 때의 장점과 단점은 뭘까?


SSG(Static Site Generation)란?

    미리 HTML을 만들어두고 요청이 오면 바로 보여주는 방식이다.

[SSG의 동작 과정]
1) 빌드 시 프레임워크는 모든 경로에 대한 HTML 파일을 미리 생성한다.
2) 사용자가 웹 사이트에 접속하면, 서버는 미리 생성해둔 HTML을 보낸다.
3) 브라우저는 받은 HTML을 표시
4) 추가 페이지 요청 시, 미리 생성해둔 해당 페이지의 HTML을 보낸다.
   → 즉, SSG는 미리 요리(웹 페이지 렌더링)를 완성시켜놓고, 동일한 요리를 계속 제공하는 방식

그럼 SSG를 사용했을 때의 장점과 단점은 뭘까?


그렇다면 언제 어떤 방식을 쓰는게 좋을까?
상황 추천 방식
자주 바뀌는 데이터 / 웹앱 CSR
뉴스/커머스 등 SEO가 중요한 동적 사이트 SSR
블로그, 문서, 마케팅 페이지 SSG

 


렌더링 방식 비교 요약
항목 CSR SSR SSG
렌더링 위치 클라이언트(브라우저) 서버 빌드 시 (정적 파일 생성)
속도 느린 초기 로딩, 이후 빠름 초기 빠름, 페이지 이동 느림 매우 빠름
SEO 불리 유리 매우 유리
유동 데이터 잘 맞음 적당함 안 맞음

[추가적으로 브라우저의 렌더링 과정을 자세히 알고 싶다면 아래 글 참고 !] ⤵️

https://y-flm.tistory.com/79

 

[CS] 브라우저의 렌더링 과정

브라우저의 렌더링 과정은 웹 개발자라면 필수적으로 알아야 할 지식 중 하나이다!간단히 말하자면, 우리가 작성한 HTML / CSS / JS를 브라우저가 화면에 그리는 과정을 말한다. 쉽게 이해해보기 위

y-flm.tistory.com

 

반응형

+ Recent posts