inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

mongoose v6 공지하신거 적용 했습니다. blog 저장할때, blog.user 필드에 user 도큐먼트 전체를 복사해서 저장하는데 맞나요?

미해결

mongoDB 기초부터 실무까지(feat. Node.js)

blog.user 필드에 user 도큐먼트 전체를 복사해서 저장되도록 되었습니다. blog.user 필드에는 ObjectId 가 저장되어야 하는건지, 아니면 user 도큐먼트 값을 그대로 복사한 값이 저장되어야 하는건지 궁금합니다

  • 데이터 엔지니어링
  • node.js
  • javascript
  • rest-api
  • aws
  • dbms/rdbms
  • DBMS/RDBMS
  • 데이터-엔지니어링
  • nodejs
  • mongodb
tomyumgoong 댓글 1 좋아요 0 조회수 438

compose-up 에러시

미해결

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

docker compose up 시 에러 날 때 server.js const express = require("express"); const redis = require("redis"); //레디스 클라이언트 생성 const client = redis.createClient({ // url: 'redis://redis:6379' // or socket: { port: 6379, host: 'redis-container' } }); const app = express(); app.get('/', async (req, res) => { await client.connect(); let number = await client.get('number'); if (number === null) { number = 0; } console.log('Number: ' + number); res.send("숫자가 1씩 올라갑니다. 숫자: " + number) await client.set("number", parseInt(number) + 1) await client.disconnect(); }) app.listen(8080); console.log('Server is running'); yml version: "3" services: redis-server: image: redis container_name: redis-container restart: unless-stopped expose: - 6379 node-app: depends_on: - redis-server build: context: . dockerfile: Dockerfile container_name: node-app restart: on-failure ports: - "5000:8080"

  • aws
  • docker
  • ci/cd
  • github
  • 데이터 엔지니어링
  • 데이터-엔지니어링
  • cicd
  • travis-ci
duskagk 댓글 3 좋아요 3 조회수 1033

NGINX에러

미해결

비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지

vi /etc/nginx/sites-available/default 수정 전에는 정상 작동합니다. 그런데 아래와 같이 수정하면 에러 발생합니다.

  • html/css
  • aws
  • git
  • javascript
  • rest-api
  • HTML/CSS
  • mysql
  • github
jksyk 댓글 3 좋아요 0 조회수 746

23번 질문

미해결

AWS Certified Cloud Practitioner 자격증 준비하기

(a) aws Abuse팀 ( X : AWS 리소스가 침해 목적으로 사용되었다고 의심되는 경우 연락) X가 O로 변경되는게 맞는건가요?

  • 네트워크
  • aws
  • network
kh.cho 댓글 1 좋아요 1 조회수 479

Parameter DBPassword failed to satisfy constraint: must contain only alphanumeric characters.

미해결

AWS Certified Cloud Practitioner 자격증 준비하기

생성이 안되는것같은데 어떻게 해결해야될까요? DBPassword : 12345678 DBrootPassword : 12345678 DBUser : abcd 이렇게 했습니다. 암호는 특수문자, 대,소 문자, 숫자 이렇게 넣어서 해보기도 했습니다.

  • 네트워크
  • network
  • aws
kh.cho 댓글 1 좋아요 0 조회수 889

강의를 듣고 공부한 내용을 블로그에 정리해도 괜찮을까요??

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요 강의 잘 듣고 있습니다~ 블로그에 항상 그날 공부한것을 포스팅하는중인데 수업자료를 과도하게 노출하지 않는선에서 블로그를 작성하는건 괜찮을까요?? 포스팅하기전에 혹시 몰라서 질문드려봅니다!

  • java
  • mysql
  • spring
  • JPA
  • jpa
  • aws
  • spring-boot
오늘내일 댓글 1 좋아요 1 조회수 337

해당 강의 수강 증빙 관련

미해결

AWS Certified Solutions Architect - Associate 자격증 준비하기

수강확인증에 수강기간에 대한 내용이 없습니다. 수강중인 강의의 수강기간이 추가된 수강확인증 발급이 가능할까요?

  • 네트워크
  • network
  • aws
hyeonseok 댓글 1 좋아요 0 조회수 248

Axios로 API 요청시 에러

미해결

비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지

Axios로 아래와 같이 요청시 Object가 안나오고 에러가 발생합니다. 에러내용은 아래와 같습니다 참고로 MySQL 데이터는 아래와 같습니다. Axios dummy 테스트는 문제가 없었는데, Network Error는 뭘까요?

  • html/css
  • aws
  • github
  • rest-api
  • javascript
  • HTML/CSS
  • mysql
  • git
jksyk 댓글 3 좋아요 0 조회수 1221

AWS PrivateLink 와 VPN 와 Direct Connect 차이

미해결

AWS Certified Solutions Architect - Associate 자격증 준비하기

AWS PrivateLink 와 VPN 와 Direct Connect는 모두 프라이빗 연결을 제공하는데 제공 방식의 차이인건가요? PrivateLink: 인터넷 통과하지 않고 EndPoint를 이용 VPN : 인터넷을 이용 Direct Connect : 전용선 이용

  • 네트워크
  • network
  • aws
맑은맑쇼 댓글 1 좋아요 0 조회수 1497

안녕하세요. 5강, 6강 관련 질문 남깁니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요. 5강 6강을 수강하던 중 몇 가지 궁금증이 생겨 질문 남깁니다. 5강 GET API에서 사용된 CalculatorAddRequest -> 생성자 O, getter O 6강 POST API에서 사용된 CalculatorMultiplyRequest -> 생성자 X, getter O 1. GET API - CalculatorAddRequest에서 number1, number2 필드에 왜 final 키워드 가 필요한가요? 2. GET API - CalculatorAddRequest에서 생성자를 없애면 값이 0으로 바인딩되던데 왜그럴까요? 3. POST API - CalculatorMultiplyRequest에서는 왜 생성자가 없어도 값이 바인딩되는 걸까요? @RequestBody 어노테이션 때문일까요? 감사합니다.

  • aws
  • java
  • spring
  • JPA
  • mysql
  • jpa
  • spring-boot
migein7 댓글 3 좋아요 3 조회수 693

서비스 생성시 시크릿메니저 접근 오류

미해결

지금 당장 데브옵스 AWS

안녕하세요!! 서비스생성후에 실행이 안되서 문의드립니다. 권한 설정은 그림대로 한거같은데 메세지가 요렇게 나옵니다 Resourceinitializationerror: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager:ap-northeast-2:508436949792:secret:saju-prod/JWT_SECRET-dvuKfY from secrets manager: RequestCanceled: request context canceled caused by: context deadline exceeded

  • aws
홍창현 댓글 2 좋아요 0 조회수 900

운영환경 도커 이미지를 위한 Dockerfile 작성하기 마지막 부분 오류

미해결

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

11:55 부분에서 이미지 명을 명시하지 않으셨는데 12:57 부분에서 run할때는 docker-react-app 이미지를 사용하셔서 이전에 만들어진 이미지가 run 된 것 같습니다!

  • aws
  • docker
  • github
  • ci/cd
  • travis-ci
  • 데이터-엔지니어링
  • 데이터 엔지니어링
  • cicd
즐거운 코뿔소 댓글 2 좋아요 2 조회수 3179

application.yml 만들고 설정하기 부분 에러 질문입니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

다음과 같이 에러가 발생하는데, 이게 왜 그런지 이유를 모르겠습니다.

  • JPA
  • aws
  • java
  • mysql
  • jpa
  • spring
  • spring-boot
mrx 댓글 1 좋아요 1 조회수 583

strconv.Atoi: parsing "": invalid syntax 에러

미해결

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

docker-compose up --build 명령어 입력시 아래와 같은 에러가 발생하면 생성된 이미지를 제거하고 다시 명령어를 입력해보세요. (저같은 경우 제거하니 정상적으로 작동하네요)

  • github
  • aws
  • docker
  • cicd
  • 데이터 엔지니어링
  • travis-ci
김기쁨 댓글 1 좋아요 1 조회수 1092

Interceptor 여러번 호출

해결됨

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()); } } @Slf4j public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(" >> preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info(" >> postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info(" >> afterCompletion"); } } 호출이 여러번 되는 현상이 발생합니다. preHandle 로그가 3번 찍혀요. 검색하여 기본 + 2번 더 호출된다는 글을 보았으나, 제게는 해결책이 아니었습니다. ( https://okky.kr/articles/598386 ) 2번 더 호출 될 때에는 request.getParameter null로 넘어옵니다. (acceessToken까지 진행해보다가 롤백했어요 ... 이거부터 해결이 되어야해서 ㅠ.ㅠ) 도와주세요 호돌맨님! (git 주소 가렸어요 ! :D)

  • vue.js
  • spring-boot
  • spring-boot
  • vuejs
  • jpa
  • Spring Security
  • aws
  • spring-security
  • JPA
Rechel 댓글 1 좋아요 1 조회수 2585

감사합니다!!!

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

시간 가는 줄 모르게 마지막 수업까지 마쳤습니다. 열띤 강의로 수고 많으셨습니다. 감사합니다!!!

  • JPA
  • spring
  • spring-boot
  • java
  • jpa
  • aws
  • mysql
Won Baek 댓글 1 좋아요 1 조회수 294

포스트 목록 페이지 수정하기2 중에서 막히는 부분이 있습니다. (미분류)

미해결

Do It! 장고+부트스트랩: 파이썬 웹개발의 정석

안녕하세요 선생님. 강의 열심히 듣고 있습니다^^; 다름이 아니라 아래와 같이 미분류 카운트가 입력되지 않아 오류가 발생하는 부분때문에 계속 찾아보았으나, 답답한 마음에 질문글을 남깁니다. 우선 카테고리 분류에서 프로그래밍, 문화&예술 까진 카운트가 잘 입력됩니다. 그렇지만 "미분류" 부분은 계속 () 으로 표시됩니다. 분명 미분류 부분이 존재함에도 불구하고, 카운트가 되지 않는 건 무엇이 잘못되었는지 도저히 알기가 어렵습니다. 혹시 확인이 가능할까요?^^;; test.py 실행시 오류화면 미분류() 카운트 부분을 주석처리하면 테스트는 잘 완료됩니다. 총 4개의 페이지에 대한 코드를 올려봅니다. test.py base.html views.py post_list.html test.py from django.test import TestCase, Client from django.contrib.auth.models import User from bs4 import BeautifulSoup from .models import Post, Category # Create your tests here. class TestView(TestCase): def setUp(self): self.client = Client() # 방문하는 사람의 브라우저다 Client() self.user_trump = User.objects.create_user( username='trump', password='somepassword' ) self.user_obama = User.objects.create_user( username='obama', password='somepassword' ) self.category_programming = Category.objects.create( name='programming', slug='programming' ) self.category_music = Category.objects.create( name='music', slug='music' ) self.post_001 = Post.objects.create( title='첫 번째 포스트입니다.', content='Hello, world, we are the world', category=self.category_programming, author=self.user_trump, ) self.post_002 = Post.objects.create( title='두 번째 포스트입니다.', content='1등이 전부는 아니잖아요. 저는 개발을 좋아할겁니다.', category=self.category_music, author=self.user_obama, ) self.post_003 = Post.objects.create( title='세 번째 포스트입니다.', content='Category 가 없을 수도 있죠.', author=self.user_obama, ) def navbar_test(self, soup): navbar = soup.nav self.assertIn('Blog', navbar.text) self.assertIn('about_me', navbar.text) logo_btn = navbar.find('a', text='Do it Django') self.assertEqual(logo_btn.attrs['href'], '/') home_btn = navbar.find('a', text='Home') self.assertEqual(home_btn.attrs['href'], '/') blog_btn = navbar.find('a', text='Blog') self.assertEqual(blog_btn.attrs['href'], '/blog/') about_me_btn = navbar.find('a', text='about_me') self.assertEqual(about_me_btn.attrs['href'], '/about_me/') def category_card_test(self, soup): categories_card = soup.find('div', id='categories-card') self.assertIn('Categories', categories_card.text) self.assertIn( f'{self.category_programming} ({self.category_programming.post_set.count()})', categories_card.text ) self.assertIn( f'{self.category_music} ({self.category_music.post_set.count()})', categories_card.text ) self.assertIn( f'미분류 ({Post.objects.filter(category=None).count()})', categories_card.text ) def test_post_list_with_posts(self): self.assertEqual(Post.objects.count(), 3) # 1.1 포스트 목록 페이지 (post_list)를 연다. response = self.client.get('/blog/') # 1.2 정상적으로 페이지가 로드된다. self.assertEqual(response.status_code, 200) # 1.3 페이지 타이틀에 Blog 라는 문구가 있다. soup = BeautifulSoup(response.content, 'html.parser') self.assertIn('Blog', soup.title.text) self.navbar_test(soup) self.category_card_test(soup) # 3-2. 포스트 목록 페이지를 새로 고침 했을 때, response = self.client.get('/blog/') soup = BeautifulSoup(response.content, 'html.parser') # 3-3. 메인영역에 포스트 2개의 타이틀이 존재한다. main_area = soup.find('div', id='main-area') self.assertNotIn('아직 게시물이 없습니다.', main_area.text) post_001_card = main_area.find('div', id='post-1') self.assertIn(self.post_001.title, post_001_card.text) self.assertIn(self.post_001.category.name, post_001_card.text) post_002_card = main_area.find('div', id='post-2') self.assertIn(self.post_002.title, post_002_card.text) self.assertIn(self.post_002.category.name, post_002_card.text) post_003_card = main_area.find('div', id='post-3') self.assertIn(self.post_003.title, post_003_card.text) self.assertIn('미분류', post_003_card.text) self.assertIn(self.post_001.author.username.upper(), main_area.text) self.assertIn(self.post_002.author.username.upper(), main_area.text) self.assertIn(self.post_003.author.username.upper(), main_area.text) def test_post_list_without_post(self): Post.objects.all().delete() self.assertEqual(Post.objects.count(), 0) response = self.client.get('/blog/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.navbar_test(soup) self.assertIn('Blog', soup.title.text) # 2-2. 메인영역에 "아직 게시물이 없습니다." 라는 문구가 나온다. main_area = soup.find('div', id='main-area') self.assertIn('아직 게시물이 없습니다.', main_area.text) def test_post_detail(self): self.assertEqual(Post.objects.count(), 3) # 1.2 그 포스트의 url은 '/blog/1/' 이다. self.assertEqual(self.post_001.get_absolute_url(), '/blog/1/') #.2. 첫 번째 포스트의 상세 페이지 테스트 # 2-1. 첫 번째 포스트의 url로 접근하면 정상적으로 작동한다. (status code : 200). response = self.client.get(self.post_001.get_absolute_url()) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') # # 2-2. 포스트 목록 페이지와 똑같은 네비게이션 바가 있다. self.navbar_test(soup) # 2-3. 첫 번째 포스트의 제목이 웹 브라우저 탭 타이틀에 들어있다. self.assertIn(self.post_001.title, soup.title.text) # 2-4. 첫 번째 포스트의 제목이 포스트 영역에 있다. main_area = soup.find('div', id='main-area') post_area = main_area.find('div', id='post-area') self.assertIn(self.post_001.title, post_area.text) # # 2-5. 첫 번째 포스트의 작성자(author)가 포스트 영역에 있다. (아직 구현할 수 없음) self.assertIn(self.user_trump.username.upper(), post_area.text) # # 2-6. 첫 번째 포스트의 내용(content)이 포스트 영역에 있다. self.assertIn(self.post_001.content, post_area.text) base.html <!DOCTYPE html> {% load static %} <html> <head> <title>{% block head_title %} Blog | 하도영 웹사이트 {% endblock %}</title> <link href="{% static 'blog/bootstrap/bootstrap.min.css' %}" rel="stylesheet" type="text/css"> <!-- <link href="./practice.css" rel="stylesheet" type="text/css"> --> <!-- 주석처리 키 ctrl + / --> <script src="https://kit.fontawesome.com/c1d4d1ab30.js" crossorigin="anonymous"></script> </head> <body> {% include 'blog/navbar.html' %} <div class="container"> <!-- 블로그 리스트 페이지 만들기 강의 5:04 blog 글자 부분 container 클래스에 의해 do it django 와 같은 간격으로 맞춰짐 --> <!-- 이 아래는 9:3, 좁을때는 8:4 로 나눌거임 --> <div class="row my-3"> <div class="col-md-8 col-lg-9", id="main-area"> {% block main_area %} {% endblock %} </div> <div class="col-md-4 col-lg-3"> <!-- Search widget--> <div class="card mb-4"> <div class="card-header">Search</div> <div class="card-body"> <div class="input-group"> <input class="form-control" type="text" placeholder="Enter search term..." aria-label="Enter search term..." aria-describedby="button-search" /> <button class="btn btn-primary" id="button-search" type="button">Go!</button> </div> </div> <!-- Categories widget--> <div class="card mb-4", id="categories-card"> <div class="card-header">Categories</div> <div class="card-body"> <div class="row"> <ul> {% for category in categories %} <li> <a href="#!">{{ category.name }} ({{ category.post_set.count }})</a> </li> {% endfor %} <!-- views.py 에 def get_context_data(self, **kwargs): 를 참고한다. --> <li> <a href="#!">미분류 ({{ no_category_post.count }})</a> </li> </ul> </div> </div> </div> </div> </div> </div> {% include 'blog/footer.html' %} <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script> </body> </html> views.py from django.shortcuts import render from django.views.generic import ListView, DetailView from .models import Post, Category class PostList(ListView): model = Post # template_name = 'blog/post_list.html' ordering = '-pk' def get_context_data(self, **kwargs): context = super(PostList, self).get_context_data() context['categories'] = Category.objects.all() context['no_category_post.count'] = Post.objects.filter(category=None).count() # 미분류인 애들이 몇개인지 확인한다. filter기능을 이용해 none 인 애를 확인하고 count() 에 숫자를 담아 no_category_post.count에 넣어준다. return context class PostDetail(DetailView): model = Post template_name = 'blog/post_detail.html' # def index(request): # posts = Post.objects.all().order_by('-pk') # # pk는 순서대로 -pk 는 역순으로 최신 쓰레드가 위로 나오도록 조회 # return render( # request, # 'blog/index.html', # { # 'posts': posts, # } # ) # def single_post_page(request, pk): # post = Post.objects.get(pk=pk) # # return render( # request, # 'blog/single_page.html', # { # 'post': post, # } # ) post_list.html {% extends 'blog/base.html' %} {% block main_area %} <h1> Blog </h1> {% if post_list.exists %} {% for p in post_list %} <!-- Blog Post --> <div class="card mb-4", id="post-{{ p.id }}"> {% if p.head_image %} <img class="card-img-top" src="{{ p.head_image.url}}" alt="{{ p.title }}" /> {% else %} <img class="card-img-top" src="https://picsum.photos/seed/{{ p.id }}/600/200" alt="{{ p.title }}" /> {% endif %} <div class="card-body"> <!-- <div class="small text-muted">January 1, 2022</div>--> {% if p.category %} <span class="badge badge-secondary float-right">{{ p.category }} </span> {% else %} <span class="badge badge-secondary float-right">미분류</span> {% endif %} <h2 class="card-title h4">{{ p.title }}</h2> {% if p.hook_text %} <h5 class="text-muted">{{ p.hook_text }}</h5> {% endif %} <p class="card-text">{{ p.content | truncatewords:45 }}</p> <a href="{{ p.get_absolute_url }}" class="btn btn-primary">Read more →</a> </div> <div class="card-footer text-muted"> Posted on {{ p.created_at }} by <a href="#">{{ p.author | upper }}</a> </div> </div> {% endfor %} {% else %} <h1> 아직 게시물이 없습니다. </h1> {% endif %} <!-- Pagination--> <ul class="pagination justify-content-center my-4"> <li class="page-item"> <a class="page-link" href="#!">&larr; Older</a> </li> <li class="page-item disabled"> <a class="page-link" href="#!">Newer &rarr;</a> </li> </ul> {% endblock %}

  • html/css
  • django
  • HTML/CSS
  • docker
  • tdd
  • javascript
  • python
  • bootstrap
  • aws
몽상가 댓글 1 좋아요 0 조회수 488

AWS에서 S3 객체 선택해서 작업하려고 할 때 'ACL을 사용하여...' 이 버튼은 왜 비활성화 돼있나요?

미해결

Amazon S3에서 버킷 생성한 다음에 파일을 업로드하고 객체 선택해서 위에 작업 버튼 눌렀는데 맨 밑에 ' ACL을 사용하여 퍼블릭으로 설정 ' 이 버튼이 비활성화 돼있어서 클릭이 안됩니다. 왜 그런건지 알 수 있을까요? 그리고 버튼을 활성화 시키려면 어떻게 해야 하는 지 알려주세요..!

  • aws
  • s3
  • amazon
  • bucket
chanullity 댓글 1 좋아요 0 조회수 697

[해결완료]nginx root 경로 변경 404 not found

미해결

비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지

경로 설정은 잘 된거같은데 not found가 나오네요 ㅠ nginx restart도 해봤습니다. 문제가 뭘까요? https://github.com/memilmooki/FoodMap

  • html/css
  • rest-api
  • aws
  • HTML/CSS
  • javascript
  • mysql
  • rest-api
  • git
  • github
한현묵 댓글 3 좋아요 0 조회수 10704

스프링 컨테이너 한 클래스 내에서 두개의 @Repository 사용하기

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

BookController 내에서 서로 다른 Repository를 사용하려고 한다면 어떻게 사용해야 하나요? 1번인 saveBook에서는 BookMemoryRepository의 saveBook()을 사용하고 2번인 saveBook1 에서는 BookMySqlRepository의 saveBook()을 사용하고 싶다고 하면 사용할 수 있는지? 사용할 수 있다면 어떻게 사용해야 하나요??

  • spring-boot
  • aws
  • spring
  • JPA
  • jpa
  • mysql
  • java
이동진 댓글 1 좋아요 2 조회수 855

인기 태그

인프런 TOP Writers

주간 인기글