inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

설치기본 환경설정에서 script가 없습니다.

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

atom에서 script를 설치하라고 하시는데 atom에서 script가 없어서 무엇을 설치해야되는지 잘모르겠습니다. 다른 packages를 설치해야한다면 뭘 설치해야할까요?

  • atom
  • python
  • 환경설정
초코칙촉 댓글 1 좋아요 0 조회수 387

책에 페치 조인 대상에는 별칭을 줄수 없다. 라고 나와서 궁금증이 생겼어여

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

책 381쪽에 보면 페치 조인 대상에는 별칭을 줄 수 없다라고 나오고, 대신 하이버네이트같은 몇몇 구현체는 지원해 준다고 나와있더라구요 "select distinct o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", 위와 같은 JPQL에서 o.orderItems 과 페치조인하고 oi로 별칭을 주었는데, 이 별칭을 활용하여 join fetch oi.item i 처럼 또 페치조인을 하는데... JPA에서 공식 스펙은 아니지만 하이버네이트가 잘 지원해주는 것 맞나요? 최종 질문은 저렇게 페치조인 대상에 별칭주고 거기서 또 페치조인해서... 잘 써도 되는지 궁금합니다. JPA의 공식스펙이 아닌것 같은데 문제없이 동작하는지.. (위 같은 경우는 당연 일대일이나 다대일에서만 쓸것입니다)

  • spring
  • JPA
  • spring-boot
  • java
이용조 댓글 1 좋아요 1 조회수 369

mmdetection mask-rcnn 추론결과 title 이름 변경 관련

미해결

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

안녕하세요 강사님 mmdetection 관련해서 이론적으로나 실무적으로나 항상 많은 도움 받고있습니다. 강의 내용을 바탕으로 mmdetection code를 작성하던 도중 질문사항이 생겨서요 ㅎㅎ mmdetection Mask R-CNN 모델을 이용하여 추론결과 아래 사진과 같이 mask, bbox 두가지가 나타나는데 bbox위에 나타나는 title(coin) 대신 변수를 표시하고 싶습니다. class name, confidence score 가 아닌 ID, pixel number를 표시하고 싶습니다. 제 코드는 다음과 같습니다. img_name = path_dir + '/' + file_list[i] img_arr= cv2.imread(img_name, cv2.IMREAD_COLOR) img_arr_rgb = cv2.cvtColor(img_arr, cv2.COLOR_BGR2RGB) # cv2.imshow('img',img) fig= plt.figure(figsize=(12, 12)) plt.imshow(img_arr_rgb) # inference_detector의 인자로 string(file경로), ndarray가 단일 또는 list형태로 입력 될 수 있음. results = inference_detector(model, img_arr) #추론결과 디렉토리에 저장 model.show_result(img_arr, results, score_thr=0.8, title= bbox_color=(0,0,255),thickness=0.5,font_size=7, out_file= f'{save_dir1}{file_list[i]}') 이 결과 추론되는 사진은 다음과 같습니다 아래는 mmdetection/mmdet/core/visualization/image.py에 있는 imshow_det_bboxes 함수입니다. 아래 함수가 시각화 해주는 함수여서 해당 함수를 수정하면 될 것 같은데 아무리 뜯어봐도 어디를 고쳐야할 지 도저히 감이 오질 않습니다 ...ㅠㅠ def imshow_det_bboxes(img, bboxes, labels, segms=None, class_names=None, score_thr=0, bbox_color='green', text_color='green', mask_color=None, thickness=2, font_size=13, win_name='', show=True, wait_time=0, out_file=None): """Draw bboxes and class labels (with scores) on an image. Args: img (str or ndarray): The image to be displayed. bboxes (ndarray): Bounding boxes (with scores), shaped (n, 4) or (n, 5). labels (ndarray): Labels of bboxes. segms (ndarray or None): Masks, shaped (n,h,w) or None class_names (list[str]): Names of each classes. score_thr (float): Minimum score of bboxes to be shown. Default: 0 bbox_color (str or tuple(int) or :obj:`Color`):Color of bbox lines. The tuple of color should be in BGR order. Default: 'green' text_color (str or tuple(int) or :obj:`Color`):Color of texts. The tuple of color should be in BGR order. Default: 'green' mask_color (str or tuple(int) or :obj:`Color`, optional): Color of masks. The tuple of color should be in BGR order. Default: None thickness (int): Thickness of lines. Default: 2 font_size (int): Font size of texts. Default: 13 show (bool): Whether to show the image. Default: True win_name (str): The window name. Default: '' wait_time (float): Value of waitKey param. Default: 0. out_file (str, optional): The filename to write the image. Default: None Returns: ndarray: The image with bboxes drawn on it. """ assert bboxes.ndim == 2, \ f' bboxes ndim should be 2, but its ndim is {bboxes.ndim}.' assert labels.ndim == 1, \ f' labels ndim should be 1, but its ndim is {labels.ndim}.' assert bboxes.shape[0] == labels.shape[0], \ 'bboxes.shape[0] and labels.shape[0] should have the same length.' assert bboxes.shape[1] == 4 or bboxes.shape[1] == 5, \ f' bboxes.shape[1] should be 4 or 5, but its {bboxes.shape[1]}.' img = mmcv.imread(img).astype(np.uint8) if score_thr > 0: assert bboxes.shape[1] == 5 scores = bboxes[:, -1] inds = scores > score_thr bboxes = bboxes[inds, :] labels = labels[inds] if segms is not None: segms = segms[inds, ...] mask_colors = [] if labels.shape[0] > 0: if mask_color is None: # Get random state before set seed, and restore random state later. # Prevent loss of randomness. # See: https://github.com/open-mmlab/mmdetection/issues/5844 state = np.random.get_state() # random color np.random.seed(42) mask_colors = [ np.random.randint(0, 256, (1, 3), dtype=np.uint8) for _ in range(max(labels) + 1) ] np.random.set_state(state) else: # specify color mask_colors = [ np.array(mmcv.color_val(mask_color)[::-1], dtype=np.uint8) ] * ( max(labels) + 1) bbox_color = color_val_matplotlib(bbox_color) text_color = color_val_matplotlib(text_color) img = mmcv.bgr2rgb(img) width, height = img.shape[1], img.shape[0] img = np.ascontiguousarray(img) fig = plt.figure(win_name, frameon=False) plt.title(win_name) canvas = fig.canvas dpi = fig.get_dpi() # add a small EPS to avoid precision lost due to matplotlib's truncation # (https://github.com/matplotlib/matplotlib/issues/15363) fig.set_size_inches((width + EPS) / dpi, (height + EPS) / dpi) # remove white edges by set subplot margin plt.subplots_adjust(left=0, right=1, bottom=0, top=1) ax = plt.gca() ax.axis('off') polygons = [] color = [] for i, (bbox, label) in enumerate(zip(bboxes, labels)): bbox_int = bbox.astype(np.int32) poly = [[bbox_int[0], bbox_int[1]], [bbox_int[0], bbox_int[3]], [bbox_int[2], bbox_int[3]], [bbox_int[2], bbox_int[1]]] np_poly = np.array(poly).reshape((4, 2)) polygons.append(Polygon(np_poly)) color.append(bbox_color) label_text = class_names[ label] if class_names is not None else f'class {label}' if len(bbox) > 4: label_text += f'|{bbox[-1]:.02f}' ax.text( bbox_int[0], bbox_int[1], f'{label_text}', bbox={ 'facecolor': 'black', 'alpha': 0.8, 'pad': 0.7, 'edgecolor': 'none' }, color=text_color, fontsize=font_size, verticalalignment='top', horizontalalignment='left') if segms is not None: color_mask = mask_colors[labels[i]] mask = segms[i].astype(bool) img[mask] = img[mask] * 0.5 + color_mask * 0.5 plt.imshow(img) p = PatchCollection( polygons, facecolor='none', edgecolors=color, linewidths=thickness) ax.add_collection(p) stream, _ = canvas.print_to_buffer() buffer = np.frombuffer(stream, dtype='uint8') img_rgba = buffer.reshape(height, width, 4) rgb, alpha = np.split(img_rgba, [3], axis=2) img = rgb.astype('uint8') img = mmcv.rgb2bgr(img) if show: # We do not use cv2 for display because in some cases, opencv will # conflict with Qt, it will output a warning: Current thread # is not the object's thread. You can refer to # https://github.com/opencv/opencv-python/issues/46 for details if wait_time == 0: plt.show() else: plt.show(block=False) plt.pause(wait_time) if out_file is not None: mmcv.imwrite(img, out_file) plt.close() return img 감사합니다

  • mask-rcnn
  • mmdetection
  • 딥러닝
  • 머신러닝 배워볼래요?
  • python
  • 컴퓨터-비전
  • tensorflow
  • keras
댓글 1 좋아요 0 조회수 647

Junit5로 테스트 작성하기

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

메세지 검증방식으로 해보았습니다. Junit5로 시도하는분들에게 도움이 되길~ public class NotEnoughStockException extends RuntimeException{ @Override public String getMessage() { return "재고가 모자랍니다"; } } NotEnoughStockException thrown = assertThrows(NotEnoughStockException.class, () -> orderService.order(member.getId(), item.getId(), order)); assertEquals("재고가 모자랍니다", thrown.getMessage());

  • spring
  • java
  • 웹앱
  • JPA
  • spring-boot
Klolarion 댓글 1 좋아요 3 조회수 627

윈도우 명령어 관련 질문입니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

윈도우는 h2.bat으로 접속을 했습니다. 2:08 부분에서 ll 와 ls - arlth 명령어를 통해 jpashop.mv.db가 생성되는 것을 확인할 때 윈도우 명령어로는 어떻게 진행해야 할까요? 보시는 것처럼 연결하게 되면 키 입력이 먹히지 않아 확인을 어떻게 해야할지... 윈도우 명령어랑 리눅스 명령어 비교를 해보려고 찾아봤는데 딱 맞는게 없는거 같아서 질문드립니다.

  • spring-boot
  • JPA
  • spring
  • 웹앱
  • java
갤러하드 댓글 1 좋아요 0 조회수 512

오류를 이해를 못하겠습니다.

해결됨

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

AssertionError at /post/ The `.create()` method does not support writable nested fields by default. Write an explicit `.create()` method for serializer `instagram.serializers.PostSerializer`, or set `read_only=True` on nested serializer fields. 저 오류로 프로젝트 2번 갈아 엎었는데 똑같은 곳에서 계속 막히네요.

  • python
  • docker
  • django
  • react
임찬 댓글 1 좋아요 0 조회수 499

repository 생성이유

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 좋은강의 감사합니다!! 다름이아니라, MemberRepository를 따로 만드는 이유에 대해서 아직 궁금증이 안풀려서요! MemberRepository 인터페이스에서 메서드를 꺼내서 쓰는 것 보다는 MemoryMemberRepository(implement로 인터페이스 구현을 하지않고) 메서드를 직접 쓰는게 낫지 않나 해서요! 결론적으로 굳이 repository 인터페이스를 만드는 이유에 대해서 궁금합니다!

  • spring
  • spring-boot
  • MVC
  • java
김영광 댓글 1 좋아요 1 조회수 981

안녕하세요 영한님! 네이티브 쿼리 사용이 적절한 상황인지 궁금해서 질문드려요

미해결

실전! 스프링 데이터 JPA

우선 제가 하려는 동작은 "특정 브랜드의 카테고리별 상품의 최저가의 합" 을 구하는 쿼리를 작성해야했었고 결과물 쿼리는 " select sum(temp_mins.mins) as total from ( select min(price) mins from product where brand_num = ? group by category_num ) as temp_mins" 위처럼 작성했습니다. 코드는 @Query(value = "select sum(temp_mins.mins) as total from (select min(price) mins from product where brand_num = ? group by category_num) as temp_mins", nativeQuery = true) Integer sumLowestPriceEachCategoryByBrand(Long brandNum); 입니다. queryDsl이나 JPQL에선 from절의 서브쿼리 기능을 제공하지 않는다고 파악되어서 고민끝에 네이티브 쿼리까지 왔는데요. 현재 강의에서 네이티브 쿼리의 대표적인 단점으로 뽑아주신게 반환타입 부분으로 학습했는데 제 생각으로는 단순한 박싱 타입으로 반환하기 때문에 크게 문제가 없다고 생각됩니다. 혹시 위 코드가 네이티브 쿼리를 사용하는데 적절한 상황일까요?

  • JPA
  • java
  • spring-boot
  • spring
마뇽 댓글 1 좋아요 1 조회수 280

dataset 선택에 대하여 질문드립니다.

해결됨

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

안녕하십니까 교수님 최근 진행중인 프로젝트 수행을 위해서 강의를 듣고 있는 학생입니다. 현재 depth camera 를 이용하는 딥러닝 프로젝트를 진행하며 여러가지 오픈소스를 찾던 중 ssd-mobilenet 을 PASCAL VOC 로 학습한 것과 같은 알고리즘 ssd-mobilenet를 사용하여 COCO dataset으로 학습된 것을 봤습니다. 만약 오픈 소스를 사용하는 입장이면(학습하는 시간을 고려하지 않았을 때) 무조건 데이터 분류가 많고, 사진 당 오브젝트 수가 많은 COCO 데이터셋이 학습된 소스가 좋다고 생각하는데 혹시 다른 차이가 있을까 궁금해서 이렇게 질문드리게 되었습니다 학습 분류가 많을수록 FPS 에 의한 차이가 있나요? 학습 분류가 많을수록 특정 사물에 대한 detection 성능의 차이가 있을 수 있나요? - 예를 들어 person 데이터만 필요할 때 PASCAL VOC, COCO 또는 open image 를 사용할 때 성능 차이가 발생하나요? 다른 차이가 있을까요? 강의는 항상 잘 듣고 있습니다. 덕분에 다양한 프로젝트를 진행하여 취업까지 연결할 수 있었습니다. 아직 반정도 남았지만 분발하여 꼭 완강하도록 하겠습니다. 감사합니다!!

  • 딥러닝
  • 머신러닝 배워볼래요?
  • tensorflow
  • python
  • 컴퓨터-비전
  • keras
김강현 댓글 1 좋아요 1 조회수 332

영속성 전이 + 고아객체

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 영한님! 영속성 전이 + 고아객체에 대해서 질문이 있습니다.! 강의 20분12초 쯤부터 설명하시는 내용을 들어보면 CascadeType.ALL + orphanRemovel = true를 설정하게 되면 부모 엔티티를 통해서 자식의 생명주기를 관리 할 수 있다고 말씀하셨는데 그러면 아래와 같은 코드가 있을때 public Parent findParent(Long id) { return em.find(Parent.class, id); } public void deleteParent(String name) { em.createQuery("delete from Parent p" + " where p.name = :name") .setParameter("name", name) .executeUpdate(); } @Transactional public void delete() { Parent parent = parentRepository.findParent(1L); parentRepository.deleteParent(parent.getName()); } 이런식으로 코드를 작성하면 자식도 함께 삭제가 안되는게 맞는 걸까요? 위와 같이 진행하면 무결성 참조 에러가 발생하여서 질문 남깁니다..! 😭 Referential integrity constraint violation 감사합니다. 장세웅 드림.

  • 영속성전이+고아객체
  • java
  • JPA
개발하는쿼카 댓글 1 좋아요 2 조회수 289

잘 모르겠습니다ㅠㅠ

미해결

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

함수 자체에는 문제가 없는 것 같은데 실행을 하면 사진과 같이 나옵니다.. 대체 어디가 틀렸는지 모르겠습니다ㅠㅠ

  • python
tjqkdwnstn 댓글 0 좋아요 0 조회수 211

클릭해서 해당 클래스로 이동

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

강의 7분50초처럼 다른 곳에서 클래스를 클릭할때, 해당 클래스로 이동하는 설정은 어떻게 하는 것인가요? 윈도우 사용중인데 안 되어서 질문 드립니다. 단축키는 ctrl+B인것을 아는데 클릭해서 가는건 어떻게 하는지 모르겠네요 ㅠㅠ

  • MVC
  • spring-boot
  • java
  • spring
댓글 1 좋아요 0 조회수 335

리팩토링 강의 [ 일부 소스 파일 누락 ]

해결됨

코딩으로 학습하는 리팩토링

안녕하세요 백기선님! 강의 정말 잘 듣고 있습니다 ( 리팩토링, 패턴, 자바, 스프링 등등!! ) 지금 리팩토링 강의를 보고 있던 중, Combine Fucntion into Transform 목차 부분에서 제공 해주시는 소스와 강의에서 다루는 파일이 일치 하지 않아서 글 남겨드려요! ( ReadingClient & ReadingClientTest 파일 ) 강의를 보고 해당 파일을 만드는것은 어렵진 않지만 보완이 되면 좋을 것 같습니다! 질 좋은 강의를 만들어 주셔서 항상 감사하는 마음으로 듣고 있습니다. 감사합니다!

  • java
  • intellij
  • refactoring
GR 댓글 1 좋아요 0 조회수 349

test 부분에 대하여 질문 드립니다!

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요! 좋은 강의 감사드립니다. test 부분에서 메모리에 기록이 남아 있어서 afterEach method를 작성하여서 이전 기록을 지우는 걸로 이번 강의에서 배웠는데 동일한 이름을 가진 기록("spring1", "spring2") 때문에 에러가 발생하는 걸까요?

  • MVC
  • java
  • spring-boot
  • spring
ehduszkdzkd 댓글 3 좋아요 0 조회수 249

BeanCreationException 질문드립니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: jpabook.jpashop.domain.item.Item.categories[jpabook.jpashop.domain.Category] 이런 에러가 발생합니다. 코드 첨부합니다. 해당 부분을 지우면 문제없이 돌아가요.. package jpabook.jpashop.domain; import jpabook.jpashop.domain.item.Item; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Embeddable @Getter @Setter public class Category { @Id @GeneratedValue @Column(name = "category_id") private Long id; private String name; @ManyToMany @JoinTable(name = "category_item", joinColumns = @JoinColumn(name = "category_id"), inverseJoinColumns = @JoinColumn(name = "item_id")) private List<Item> items = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); public void addChildCategory(Category child) { this.child.add(child); child.setParent(this); } protected Category(){} } package jpabook.jpashop.domain.item; import jpabook.jpashop.domain.Category; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter @Setter public abstract class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; @ManyToMany(mappedBy = "items") private List<Category> categories = new ArrayList<Category>(); }

  • java
  • spring
  • spring-boot
  • 웹앱
  • JPA
흑후추 댓글 2 좋아요 0 조회수 412

혹시 강의에 자막은 없을까요?

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요 다름이 아니라 강의에 따로 자막 기능은 없을까요? 혹은 추가 할 수 있는 방법은 없을까요?ㅠ

  • 자막
  • MVC
  • spring-boot
  • java
  • spring
감바스 댓글 2 좋아요 0 조회수 789

주문할 때 상품 여러개 선택하는 기능 추가

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요, 이 프로그램을 좀 더 발전시켜보고 싶은데요 주문할 때 상품을 여러개 선택하도록 만들고싶은데, 이렇게 하려면 상품과 주문 수량을 골랐을 때 다시 화면에 추가로 선택 칸이 만들어져야 할 것 같습니다. 이 기능을 혹시 스프링과 타임리프 만으로 구현할 수 있나요, 아니면 자바스크립트를 공부해서 만들어야 할까요? 대략적인 가이드라도 조언 부탁드립니다. 감사합니다.

  • 웹앱
  • spring
  • java
  • JPA
  • spring-boot
ms 댓글 1 좋아요 1 조회수 519

stream

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요! 6:40초 쯤에 보면, 이 코딩이 이해가 잘 가지않아 질문을 드리게 되었습니다. 이 부분이 stream + 람다식 문법을 사용한게 맞을까요? 아래처러머 제가 이해한 게 맞는지 궁금합니다 ㅠㅠ.. store라는 참수변수의 value(값)을 stream을 통해 읽고, filter()를통해 데이터를 걸러내고 마지막 최종연산으로 findAny()로 name을 찾아낸다.. 가 맞을까요?

  • java
  • spring-boot
  • spring
  • MVC
뿌뚜리 댓글 2 좋아요 1 조회수 496

테이블 drop & create 중 기생성되어있는 FK 로 인한 오류 발생(H2 v2.1.212)

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요. 기존에 이 오류에 관한 비슷한 질문들이 있지만 저는 H2 버전을 2.1.212 사용하고 있어서 버전 문제가 아닌것 같아서 문의 글 남겨봅니다. 다대다 CATEGORY_ITEM 테이블 매핑 예제까지는 문제 없었는데 , 상송관계 매핑강의 예제를 하면서 부터 다음 에러가 발생합니다. Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "CATEGORY" because "FKJIP0OR3VEMIXCCL6VX0KLUJ03" depends on it; SQL statement: 강의 잘 듣고 있습니다. 감사합니다!

  • java
  • JPA
jihyeking47 댓글 2 좋아요 4 조회수 663

질문있습니다!!

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

강의를 보던 중에 연관 관계 메소드에 관련되어서 질문이 있습니다. Category 클래스에서 보면 엔티티 안에서 멤버 변수들끼리 양방향 관계를 맺는 parent랑 child가 있는데 아래 코드가 잘 이해가 안됩니다. this.child는 멤버 변수 child를 의미하는데 child 리스트 안에 파라미터인 child를 넣는다는 뜻인건가요? 그리고 child.setParent에는 왜 this가 들어가나요..? this는 객체 자신인 Category라고 알고 있는데 제가 잘못 안건가요? public void addChildCategory (Category child){ this . child .add(child) ; child.setParent( this ) ; }

  • spring
  • 웹앱
  • spring-boot
  • JPA
  • java
tommy7899 댓글 1 좋아요 0 조회수 356

인기 태그

인프런 TOP Writers

주간 인기글